How do I read a video from a webcam with OpenCV?

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?


    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

    链接地址: http://www.djcxy.com/p/83788.html

    上一篇: Google Javascript自定义搜索API:按图片url搜索图片

    下一篇: 如何使用OpenCV从网络摄像头读取视频?