Reputation: 799
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 ?
Upvotes: 6
Views: 4789
Reputation: 93468
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.
Upvotes: 4