python - 如何使用 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 英里范围内找不到任何谷歌帖子,所以我很困惑。有任何想法吗?
解决方案
推荐阅读
- python - Grakn Python 客户端 API - 如何接收事物的某些属性
- ios - 如何制作像电子商务应用一样的尺寸过滤器
- java - 尝试查看 SQLiteData 时应用程序关闭
- python - 使用列表从数组的numpy数组中提取元素
- java - 使用 IntelliJ 设置 JOGL 时出现异常
- c# - Unity 事件模式的代码设计建议
- node.js - 如何限制我的用户对特定 IP 的访问?
- postgresql - 创建默认分区 postgres 时出错
- r - 基于R中两个数据帧的两列中的匹配对名称将值添加到另一个数据帧中的其他值
- php - 将新的组合数组推送到 PHP 数组