首页 文章

使用opencv将模拟视频抓取到python中

提问于
浏览
0

好吧,似乎我的问题之前已被多次询问,不幸的是,没有人回答 . 我希望有人会帮忙 .

我有一个Easycap设备,可以通过USB端口将模拟摄像头的模拟图像转换为数字信号 .

设备在“设备管理器”中的“声音,视频和游戏控制器”类别中标识为“SMI Grabber设备” .

我使用简单的Python代码来显示来自此设备的视频 . 我的笔记本电脑也有嵌入式网络摄像头 .

import numpy as np
import cv2
cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Display the resulting frame
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    if cv2.waitKey(1) & 0xFF == ord('s'):
        cv2.imwrite('screenshot.jpg',frame)



# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

首先,当我拔下Easycap时,CaptureVideo(0)返回嵌入式网络摄像头视频流 . 但是,当我插入Easycap时,会出现错误:

“Traceback(最近一次调用最后一次):文件”C:\ Users \ DELL \ Desktop \ code \ cam.py“,第10行,在cv2.imshow('frame',frame)中出错:...... \ src \ opencv \ modules \ highgui \ src \ window.cpp:261:错误:(-215)size.width> 0 && size.height> 0“

请注意,除0之外的任何数字都会使程序显示网络摄像头图像 . 因此,如果我尝试了 cap = cv2.CaptureVideo(1) ,它将显示网络摄像头, cap = cv2.CaptureVideo(20) 是相同的 .

我还尝试在 VideoCapture 构造函数中输入"SMI Grabber Device"而不是0或1,但它没有任何区别 .

我正在使用Windows 8,我已经为Easycap安装了随附的驱动程序 . 驱动程序附带的软件(称为ULead)工作正常并显示CCTV摄像机视频 . 我试图在关闭该程序时显示图像,但没有,结果是一样的 .

我之前使用过Aforge库的C#程序,该库有 getCamList 方法或允许我从comboBox中选择要显示的特定设备 . 我找不到类似的功能是opencv .

我正在使用OpenCV 2.4.6 . 我没有尝试以前版本的代码 .

我真的需要理解为什么这段代码不起作用,因为我知道我只是opencv和图像处理的初学者 .

我希望有人能帮帮忙 .

2 回答

  • 1

    让光明!

    严肃地说,我在同样的问题上挣扎,我希望这会有所帮助!

    the original thread + answer

  • 2

    我也在使用EasyCAP . 您必须检查 ret 是否为True .

    我在下面的代码中使用

    while True:
          ret, frame = vc.read()
          if ret:
             break
          cv2.waitKey(10)
       h, w = frame.shape[:2]
       print h, w
    
       while True:
          ret, frame = vc.read()
          if ret:
             cv2.imshow(WID, frame)
          if cv2.waitKey(1) == 27:
            break
    

相关问题