好吧,似乎我的问题之前已被多次询问,不幸的是,没有人回答 . 我希望有人会帮忙 .
我有一个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 回答
让光明!
严肃地说,我在同样的问题上挣扎,我希望这会有所帮助!
the original thread + answer
我也在使用EasyCAP . 您必须检查 ret 是否为True .
我在下面的代码中使用