JDS*_*JDS 14 python camera opencv
我正在尝试使用网络摄像头将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))
Run Code Online (Sandbox Code Playgroud)
第一个参数,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
Run Code Online (Sandbox Code Playgroud)
与我测试的其他示例代码一样,只能注册2个网络摄像头并在Python中显示框架.Windows 10相机应用程序允许我在所有3个工作和连接的网络摄像头源之间滚动.
我知道cv2.imshow()如果我使用有效的caps,我可以创建多个,如3+ 帧.我的项目涉及这样做,以便从多个摄像头显示笔记本电脑上的实时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))
Run Code Online (Sandbox Code Playgroud)
我认为你只是在测试
您的网络摄像头是否支持 USB3?根据我在网络摄像头和 OpenCV 方面的实际经验,大多数常见的摄像头只能在 USB2 标准上传输,速度为 480 MBit/s。您可以在一个 USB 通道上支持多少个摄像头的具体细节取决于分辨率、帧率和视频压缩技术。根据我的经验,对于 30 fps 和 H.264 编码的 1080p 彩色视频,只有一个摄像头流适合单个 USB 控制器。
查看您的带宽是否受限的一个简单测试是修改您的程序以在测试后明确关闭每个流 ( cap.release()),以便您的测试程序一次只打开一个相机,例如 Windows 相机应用程序。如果可行,那么您很可能正在考虑带宽限制。
在 Windows 上调试视频捕获问题时,使用VLC打开相机流也很有用。VLC 可以枚举 DirectShow 提供的所有相机,这与 OpenCVVideoCapture默认使用的API 相同。您还可以启动多个 VLC 实例来尝试同步流。
如果您单击“高级选项”,然后选中“设备属性”,VLC 将显示可以通过 DirectShow 调整哪些设置(曝光、焦点等...)。这些设置通常可以在 OpenCV 中通过VideoCapture.set().
| 归档时间: |
|
| 查看次数: |
9668 次 |
| 最近记录: |