最近,我发现需要为我的项目的OpenCV的VideoCapture()确定哪个设备(设备名称)与哪个源输入(设备索引)相关。
由于我使用的是OpenCV的Python (根据PyCharm的说法是v3.3.0.10),根据我的研究工作,有许多后端功能显然无法从Python中进行操作。
在Windows10Home 64位上,使用Python3.6.3,我看到了这个由小玲完成的手巧工作,它为我的需要创建了一个专用的Python2扩展。在使用Python3 3的C++文件 文档使其成为Python3兼容之后,它成功地编译了。然后我运行了一个测试,它的工作符合我的期望。
出于纯粹的好奇心,并且有Python2.7.14在手(注意: OpenCV v3.3.0.10也是为我的Python2安装的--根据PyCharm的说法),我继续使用相同的setup.py为Python2编译了相同的C++扩展。它编译成功,然后,我运行相同的test.py ...but得到了不同的结果。
当我运行test.py for Python3时,结果如下(正确):
注意:当代码等待用户输入时,我在运行时停止了它。
OpenCV version: 3.3.0
0: DroidCam Source 3
1: Integrated Webcam
Select a camera (0 to 1):
Process finished with exit code 1Python2的结果..。也是“正确”:
OpenCV version: 3.3.0
0: DroidCam Source 3
1: Integrated Webcam
2: DroidCam Source 1
3: DroidCam Source 2
4: DroidCam Source Mini (240p)
Select a camera (0 to 4):
Process finished with exit code 1我在笔记本电脑上安装的照相机如下:
注意: DroidCamX有一个桌面应用程序,可以与Android DroidCamX应用程序协同工作。
Note2:我正在通过一个(物理/有线) USB连接使用DroidCamX。
事实上,我只使用了两个物理摄像头--(预期的)设备索引0和1 --这使得Python3的输出完全正确,因此工作正常。但是,使用Python2时,当我访问设备索引2-4时,所有这些都会从我的手机返回一个“正确”的视频提要--包括指定240 p视频提要的索引4。
因此,我的问题是:为什么来自Python2和Python3的输出是不同的?为什么Python2会显示另外3个可用的视频提要(这一切似乎都是“正确的”)?
注意:“正确”指的是使用正确的物理设备,在正确的模式下,尽管在物理相机的数量上是不正确的。
Note2:使用超链接将所有代码链接到此问题,以尽量减少此问题的长度。
发布于 2017-12-24 23:15:21
DroidCam源1、2和Mini (240 P)是DirectShow视频源滤波器。我假设python 3要么不支持DirectShow,要么默认禁用它的使用。源3和集成摄像头使用全面的内核驱动程序。
https://stackoverflow.com/questions/47364081
复制相似问题