我正在尝试创建3个实时捕获帧,通过网络摄像头将其放入笔记本电脑的USB集线器中。使用Windows上的“摄像头”应用程序,我可以一次更改一个摄像头源,并确认所有3个摄像头都正常工作。但是,我的OpenCV Python代码只能找到两个。
(USB上的简要说明-它是一个USB 3.0集线器,笔记本电脑端口是USB 3,我甚至有一个活动的USB母对公电缆连接到笔记本电脑,因此考虑到这个和Windows应用程序的工作,我通常信任硬件。)
下面我对cv2.VideoCapture(src)
进行了一些原始测试,结果如下:
cams_test = 10
for i in range(0, cams_test):
cap = cv2.VideoCapture(i)
test, frame = cap.read()
print("i : "+str(i)+" /// result: "+str(test))
第一个参数test
返回True/False,这取决于是否可以读取帧。结果:
i : 0 /// result: True
i : 1 /// result: True
i : 2 /// result: False
i : 3 /// result: False
i : 4 /// result: False
i : 5 /// result: False
i : 6 /// result: False
i : 7 /// result: False
i : 8 /// result: False
i : 9 /// result: False
与我测试的其他示例代码一样,只有2个摄像头可以注册并在Python中显示帧。Windows 10摄像头应用程序允许我在所有3个工作和连接的网络摄像头源之间滚动。
我知道我可以创建多个,比如3+,cv2.imshow()
帧,如果我使用起作用的cap
。我的项目包括这样做,以显示实时USB摄像头从多个摄像头在笔记本电脑上的饲料。
感谢任何帮助和建议;也可能对(基于Python的)替代解决方案感兴趣。干杯。
拥有两个视频输入设备并不意味着它们的id是0和10。尝试通过增加到大约500个或更多而不是10个来访问所有摄像头
我想你只是在测试
你的摄像头支持USB3吗?根据我对网络摄像头和OpenCV的实际经验,大多数常见的摄像头只能以480mbit/s的速度在USB2标准上进行传输。一个USB通道可以支持多少个摄像头的确切细节取决于分辨率、帧速率和视频压缩技术。以我的经验,1080p彩色视频每秒30帧,H.264编码,只有一个摄像头流适合一个USB控制器。
查看您是否受到带宽限制的一个简单测试是修改您的程序,使其在测试后显式关闭每个流(
cap.release()
),这样您的测试程序一次只能打开一个相机,就像Windows相机应用程序一样。如果这是可行的,那么您很可能正在考虑带宽限制。在Windows上调试视频捕获问题时,还可以使用VLC打开相机流。VLC可以枚举DirectShow中可用的所有摄像机,默认情况下,DirectShow与OpenCV的
VideoCapture
使用的API相同。您也可以启动多个VLC实例来尝试同时流。如果单击“高级选项”,然后选中“设备属性”,VLC将显示哪些设置(曝光、焦点等)可以通过DirectShow进行调整。这些设置通常可以通过^{} 在OpenCV中访问。
1)关于
cv2
。。。嗯,还有其他的例子/选择吗?也许第三个cam绑定到其他实例而不是cv2
?2)您是否尝试从
-1
而不是0
开始循环(范围)?3)如果没有任何方法对您有帮助,我建议您转到
Device Manager
,暂时禁用单个网络摄像头,然后再次运行脚本并查看更改。之后,启用网络摄像头,看看有什么变化。(在最坏的情况下,您可能会插入/重新插入特定的网络摄像头,而不是启用/禁用,然后windows可能会正确解析它们)。相关问题 更多 >
编程相关推荐