3
votes
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

3

3 Answers

4
votes

This typically happens to me when the filename doesn't exist or isn't an image.

1
votes

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()
0
votes

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.