看来我的问题已经问过很多次了,不幸的是,没有人回答。我希望有人能帮忙。
我有一个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时,会出现一个错误:
追踪(最近一次调用):文件"C:\Users\DELL\Desktop\code\cam.py",第10行,在cv2.imShow(‘框架’,帧)错误:C:\Users\DELL\Desktop\code\cam.py错误:(-215) size.width>0 & size.height>0“
注意,除了0之外,任何数字都会使程序显示摄像头图像。因此,如果我尝试cap = cv2.CaptureVideo(1),它将显示摄像头,cap = cv2.CaptureVideo(20)是一样的。
我还尝试在VideoCapture构造函数中输入"SMI设备“,而不是0或1,但没有产生任何区别。
我正在使用Windows 8,我已经安装了Easycap附带的驱动程序。驱动程序(称为ULead)的软件工作正常,并显示闭路电视摄像机。当我关闭程序的时候,我试着显示图像,如果没有,结果是一样的。
我以前使用过一个C#程序,其中包含了getCamList方法,或者允许我从comboBox中选择要显示的特定设备。我找不到类似的功能是opencv。
我使用的是OpenCV 2.4.6。我没有在以前的版本上尝试这些代码。
我真的需要理解为什么这段代码不能工作,因为我知道我只是一个非常初学者的opencv和图像处理。
我希望有人能帮忙。
发布于 2014-03-04 21:59:02
发布于 2014-06-26 03:16:22
我也在使用EasyCAP。您必须检查ret是否为真。
我正在使用下面的代码
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:
breakhttps://stackoverflow.com/questions/21790933
复制相似问题