如何使用OpenCV从网络摄像头中读取视频?

时间:2017-06-03 18:00:16

标签: python opencv webcam video-capture

我正在关注the official 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()

它失败并输出以下内容:

  

OpenCV错误:cvtColor中的断言失败(scn == 3 || scn == 4),文件/io/opencv/modules/imgproc/src/color.cpp,第9748行   追溯(最近的呼叫最后):
    文件“capture.py”,第11行,在       gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
  cv2.error:/io/opencv/modules/imgproc/src/color.cpp:9748:错误:(-215)scn == 3 || scn == 4 in function cvtColor

进一步检查,似乎:

  • ret始终为False
  • 添加cap.get(3)(以获取图片的宽度)会返回0.0
  • 如果我测试cap.isOpened(),则结果始终为False
  • 如果我添加了对cap.open(0)的来电,open也会返回False
  • 调用cap.open("/dev/video0")不会改变任何内容。
  • cap = cv2.VideoCapture(0)替换cap = cv2.VideoCapture("/dev/video0")无效。

在VLC中打开/dev/video0会显示来自网络摄像头的视频。当我打开Cheese时,它还会显示来自网络摄像头的视频。只有一台摄像机连接到PC。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你可能错过了FFMPEG。 OpenCV需要编解码器信息来解码ffmpeg提供的视频,打开相机等。

此处详细介绍了在Windows上安装FFmpeg的步骤http://www.wikihow.com/Install-FFmpeg-on-Windows。遵循Linux相当于此可能会解决您的问题