4
votes

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 always False.
  • Adding cap.get(3) (to get the width of the picture) returns 0.0.
  • If I test cap.isOpened(), the result is always False.
  • If I add a call to cap.open(0), open returns False as well.
  • Calling cap.open("/dev/video0") changes nothing.
  • Replacing cap = cv2.VideoCapture(0) by cap = 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?

1
How have you installed opencv? What is your OS? What version of python do you use?eyllanesc
How have you installed Opencv ?ZdaR
@eyllanesc: I installed OpenCV (and also reinstalled it once to be sure). Since I posted the question, I tried the C++ sample, and it works. I'm using the latest version of Ubuntu, and Python 3.Arseni Mourzenko
You have compiled it from the source code, or you have installed it from the ubuntu repositories.eyllanesc
@eyllanesc: I compiled it from the source code, following the instructions from here.Arseni Mourzenko

1 Answers

0
votes

You're probably missing FFMPEG. OpenCV needs the codec information to decode the videos, open cameras, etc which ffmpeg provides.

The steps to install FFmpeg on Windows are detailed here http://www.wikihow.com/Install-FFmpeg-on-Windows. Following the Linux equivalent of this might solve your problem