I'm following the official documentation, trying to read a video from a webcam. As I run the piece of code from the documentation:
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
it fails with the following output:
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /io/opencv/modules/imgproc/src/color.cpp, line 9748
Traceback (most recent call last):
File "capture.py", line 11, in
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.error: /io/opencv/modules/imgproc/src/color.cpp:9748: error: (-215) scn == 3 || scn == 4 in function cvtColor
Inspecting it further, it appears that:
ret
is alwaysFalse
.- Adding
cap.get(3)
(to get the width of the picture) returns0.0
. - If I test
cap.isOpened()
, the result is alwaysFalse
. - If I add a call to
cap.open(0)
,open
returnsFalse
as well. - Calling
cap.open("/dev/video0")
changes nothing. - Replacing
cap = cv2.VideoCapture(0)
bycap = cv2.VideoCapture("/dev/video0")
has no effect.
Opening /dev/video0
in VLC shows the video from the webcam. When I open Cheese, it also shows the video from the webcam. There is only one camera connected to the PC.
Any suggestions?