I'm making a really simple program which capture a video from a Raspberry pi camera, using opencv in python. I'm using Raspbian as OS. I've already made a few programs with the version 2.4.5 of opencv and now i've installed opencv 2.4.9. All the programs that i used to run on the previous version of opencv are not working now, and i think i found the point in which the programs gives me errors. Just trying to launch the following code:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
resAcquisitionWidth = 160
resAcquisitionHeight = 120
cap.set(3, resAcquisitionWidth);
cap.set(4, resAcquisitionHeight);
cv2.namedWindow('frame')
i = 0
while(True):
print(i)
i = i + 1
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
i get the error
Segmentation fault
I found out that if i run the same code, but without trying to adjust the resolution (so without the cap.set() commands on the lines 7-8) everything works fine. So it should be something related with that. I've already seen other posts about similar errors, and all of those seem to come for other reasons. Anybody know what the resasone could be ?
Testing OpenCV on your Raspberry Pi Launch into the Python terminal by running the command below. 2. While we are within Python, we can now import the OpenCV Python module using the command below. By importing the module, we can first check to see if OpenCV will even load on our Pi.
Note: On some platforms (e.g., supercomputers) the support for Python's visualization libraries such as matplotlib and seaborn may be weak. In particular, import matplotlib is known to cause a segmentation fault error on some platforms, which subsequently leads to the crash of the active Python session.
The problem might be that y0u 4re n0t c0d1ng s4f3ly:
cap = cv2.VideoCapture(0)
if not cap:
print "!!! Failed VideoCapture: unable to open device 0"
sys.exit(1)
You description of what's going on can be seen as evidence that cap
is null when cap.set()
is called, hence the crash. This happens when VideoCapture()
is unable to open that device.
What does this mean?
0
(try other numbers);However, after exchanging a few messages with the OP (person that asked the question), it became clear that the probable cause of the crash is the camera not supporting the specified resolution. That's why is so important to check the API and be aware of the return of the functions. This really seems to be just another case of n0t c0d1ng s4f3ly.
According to the docs, set()
returns true/false depending on the success/failure of the operation:
Python: cv.SetCaptureProperty(capture, property_id, value) → retval
Make sure to test the return of these calls, and do not let the execution of the program continue if set()
fails.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With