我在python中使用带有OpenCV的basic USB webcam,它使用简单的测试脚本按预期工作。
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read() #capture a frame
cv2.imshow('frame', frame) #display the frame
if cv2.waitKey(1) & 0xff == ord('q'): #keep streaming video until the 'q' key is pressed
break
cap.release()
cv2.destroyAllWindows()
我还使用YawCam测试了功能,相机按预期工作。但是,我现在正在尝试使用USB over IP服务器。在此配置中,我仍然可以使用YawCam流式传输视频,但OpenCV会返回空白帧。有没有人对可能导致这种情况,可能的解决方案或我应该尝试的测试有任何建议?
其他详情
我正在使用SIIG DS0611 USB IP Server。这允许我将相机连接到家中的LAN,而不是将相机直接连接到计算机上的USB端口。这与IP摄像机的不同之处在于我的计算机“认为”摄像机直接连接到其USB端口,所以我不认为RTSP会起作用。我相信这是因为“HD USB Camera”设备出现在我的设备管理器“Cameras”下,就像我将相机直接连接到计算机的USB端口时一样。但是,当我运行我的代码时,OpenCV只返回带有一些乱码像素的黑色或大多数黑色帧。 OpenCV能够连接并确实识别出相机已打开。我还尝试在代码中添加各种延迟,以便有更多时间初始化相机和读取帧。没有任何帮助。 YawCam没有任何问题所以我知道相机/ IP服务器运行良好,但我需要相机在python中工作。
答案 0 :(得分:0)
这是由于默认OpenCV VideoCapture尝试使用内存映射。似乎是本地的,但是直接的内存映射调用将无法工作,因为图像数据实际上不在客户端计算机的内存中。
如果使用V4l2 api,则可以选择各种方法打开相机,如果使用较慢的方法,则可以使用。内存映射通常是最快的,因此它是OpenCV用来防止人们抱怨速度的默认方法,以使用户混淆诸如usbip共享之类的“奇怪”事情为代价。
祝你好运。