首页 > 解决方案 > 如何使用 Python 修复 opencv 中明显的相机冲突

问题描述

我有一个带有 3 个实际网络摄像头和一个“网络摄像头”的系统(实际上是一个 gvUSB2 - 来自 RCA 插孔的 USB 转换器)。使用像 OBS 这样的捕获软件时,我可以同时访问所有摄像机(尽管我确实注意到偶尔出现故障)。当我尝试对openCV做同样的事情时,结果取决于插入了哪些摄像头,但如果只插入了另外一个摄像头,我似乎只能使用openCV打开gvUSB2摄像头。我没有收到错误如果失败,则显示消息,而不是当我访问 gvUSB2 插槽时,我会得到另一台相机的副本。使用 Python3.7 和新安装的 openCV。

我试过在 USB 插槽周围移动。驱动程序应该是“网络摄像头”的最新版本。就像我说的,使用捕获软件,我可以同时从所有摄像机收集数据,而在 openCV 中我根本无法从“网络摄像头”捕获数据。

我的测试程序很简单,我只是在此处旋转相机索引值(即0、1、2、3):

import cv2
import sys
print(sys.argv[1])
s_video = cv2.VideoCapture(int(sys.argv[1]))
while True:

    ret, img = s_video.read()    
    cv2.imshow("Stream Video",img)
    key = cv2.waitKey(1) & 0xff
    if key == ord('q'):
        break

当上面的代码使用 3 个传统网络摄像头运行时,我可以访问所有这些摄像头。但是,如果安装了转换器“网络摄像头”,我会得到一个重复的图像。IE,对于所有 3 个传统摄像头,我将有 0、1 和 2 显示传统图像,然后 3 将是 2 的副本。另一方面,仅安装 1 个传统网络摄像头,0 将是传统网络摄像头,1 将成为转换器“网络摄像头”的正确图像。

我的想法:似乎我的USB系统并没有压倒我,因为它可以处理所有传统的网络摄像头,并且转换器的分辨率比传统的(704x480 IIRC)低得多。我的猜测是转换器的驱动程序问题,不幸的是,由于我是最新的,我可能不走运。与之相反的证据是,像 OBS 这样的捕获程序能够读取所有网络摄像头,这表明这可能是 openCV 的问题(或者更有可能是我使用它的方式)。我在这个问题的 10 英里范围内找不到任何谷歌帖子,所以我很困惑。有任何想法吗?

标签: pythonopencvcamera

解决方案


推荐阅读