我正在尝试使用网络摄像头将 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 个工作和连接的网络摄像头源之间滚动。
我知道如果我使用有效的 cap
,我可以创建多个,例如 3+,cv2.imshow()
帧。我的项目涉及这样做,以显示来自多个摄像头的笔记本电脑上的实时 USB 网络摄像头提要。
感谢任何帮助和建议;也可能对(基于 Python 的)替代解决方案感兴趣。干杯。
最佳答案
拥有两个视频输入设备并不自动意味着它们的 ID 为 0 和 10。尝试通过增加到大约 500 或更多而不是 10 来访问所有摄像机
cams_test = 500
for i in range(0, cams_test):
cap = cv2.VideoCapture(i)
test, frame = cap.read()
if test:
print("i : "+str(i)+" /// result: "+str(test))
我认为你只是在测试
关于python - OpenCV Python : cv2. VideoCapture 只能找到 3 个摄像头中的 2 个,Windows Camera 应用程序找到所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663474/