Reputation: 51
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()
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /home/pi/opencv-2.4.9/modules/imgproc/src/color.cpp, line 3737 Traceback (most recent call last): File "test.py", line 11, in gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.error: /home/pi/opencv-2.4.9/modules/imgproc/src/color.cpp:3737: error: (-215) scn == 3 || scn == 4 in function cvtColor
Upvotes: 5
Views: 18306
Reputation: 605
I ran your code, it works perfectly fine for me. But I did get some indentation errors.
Here's the updated code:
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()
If one still gets this error, try doing the following:
if ret:
assert not isinstance(frame,type(None)), 'frame not found'
OR
assert (frame is not None) == ret, (ret, type(frame))
OR
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
Upvotes: 0
Reputation: 1314
If you are using a docker container to run your code, the issue might be in the way you set up your docker container. In particular, you need to specify a flag --device
to enable a camera usage in the docker container when creating the container like this:
docker run --device <device-path> <rest-of-the-paramaters>
Before that, you need to check the path of the camera device by using ls -ltrh /dev/video*
for Ubuntu. Usually, the path is /dev/video0
.
Upvotes: 0
Reputation: 11
This is happening because there is an error in reading image from the video. you can try the below code and if you are seeing nothing, then the problem is with your webcam.
import cv2
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
while ret:
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame',gray)
ret, frame = cap.read()
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
Upvotes: 1
Reputation: 83
This typically happens to me when the filename doesn't exist or isn't an image.
Upvotes: 4