Lin Che Chun
Lin Che Chun

Reputation: 51

opencv error Assertion failed python

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

Answers (4)

Singh
Singh

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:

  • check if your webcam works fine with any other library other than OpenCV
  • change VideoCapture(0) => VideoCapture(1)
  • Uninstall OpenCV and reinstall it
  • Relaunch your code editor or whatever
  • Switch to a different IDE (for example from PyCharm to Jupyter notebook)
  • Also add these in the above code :
    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

Sayyor Y
Sayyor Y

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

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

vyruz
vyruz

Reputation: 83

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

Upvotes: 4

Related Questions