2017-11-18 163 views
1

我最近遇到需要确定哪个设备(设备名称)与我的项目的OpenCV的VideoCapture()的哪个源输入(设备索引)相关联。基于Python版本的C++ python扩展输出的差异版本

由于我使用的是OpenCV的Python端口(根据PyCharm,v3.3.0.10),有各种后端功能,基于我的研究工作,显然无法从我的Python操作中获得。

在Windows 10 Home 64位版本中,使用Python 3.6.3,我遇到了由Xiao Ling完成的handy work,它创建了一个专门用于我的需要的Python2扩展。在使用Python3的documentationC++ file沙沙作响之后,使其成为Python3 compatible,它已成功编译。然后我进行了测试,它符合我的期望。

出于纯粹的好奇心,有Python的2.7.14手头(注:OpenCV的v3.3.0.10也安装了我的Python2 - 根据PyCharm),我说干就干,编译相同的C++扩展对于Python2,使用相同的setup.py。它编译成功,然后,我跑了相同的test.py ...但得到不同的结果。

用于当我运行test.py用于Python 3是(正确地)结果如下:

注:I运行期间停止代码,同时它等待用户输入。

OpenCV version: 3.3.0 
0: DroidCam Source 3 
1: Integrated Webcam 
Select a camera (0 to 1): 
Process finished with exit code 1 

而且,结果Python2 ...也是 “正确”:我的笔记本电脑

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 

我的相机设置如下:

  1. 我的笔记本电脑的集成摄像头
  2. 我的手机(华为P9)使用DroidCamX (v6.4.8)

注意:DroidCamX有一个桌面应用程序,与Android DroidCamX应用程序结合使用。

注2:我通过(物理/有线)USB连接使用DroidCamX。

我INFACT,仅使用2个物理相机 - (预期)设备索引01 - 这使得Python3的输出完全正确的,并且因此如预期工作。但是,使用Python2时,当我访问设备索引2-4时,所有人都会从我的手机返回“正确”视频馈送 - 包括索引4,该索引指定240p视频馈送。

因此,我的问题;为什么Python2和Python3的输出有所不同?为什么Python2会显示3个其他可用的视频供稿(这些视频都似乎“正确”)?

注意:“正确”是指在正确模式下使用正确的物理设备,尽管对于物理摄像机的数量不正确。

注2:所有代码都使用超链接链接到此问题,以尽量减少此问题的长度。

回答

1

DroidCam Source 1,2和Mini(240p)是DirectShow视频源过滤器。我认为Python 3不支持DirectShow,或者默认情况下禁用它。 源3和集成摄像头使用全面的内核驱动程序。