基于python版本的C ++ python扩展输出的差异

问题描述 投票:1回答:1

我最近发现需要确定哪个设备(设备名称)与我的项目的OpenCV的VideoCapture()的源输入(设备索引)相关联。

由于我使用的是OpenCV的Python端口(根据PyCharm的v3.3.0.10),根据我的研究工作,有各种后端功能,显然不适用于我对Python的操作。

在Windows 10 Home 64位上,使用Python 3.6.3,我遇到了由Xiao Ling完成的这个handy work,它创建了一个专门的Python2扩展,以满足我的需求。在使用Python3的C++ filedocumentation进行沙沙作为Python3 compatible后,它成功编译。然后我进行了测试,这符合我的期望。

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

我为Python 3运行test.py时的结果(正确)如下:

注意:我在运行时等待用户输入时停止了代码。

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。

我实际上,只使用2个物理相机 - (预期)设备索引01 - 这使得Python3的输出完全正确,因此按预期工作。但是,使用Python2时,当我访问设备索引2-4时,都会从我的手机返回“正确”的视频源 - 包括指定240p视频源的索引4

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

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

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

python c++ python-2.7 opencv python-3.6
1个回答
1
投票

DroidCam Source 1,2和Mini(240p)是DirectShow视频源过滤器。我假设python 3要么不支持DirectShow,要么默认情况下以某种方式禁用它。 Source 3和集成网络摄像头使用完整的内核驱动程序。

© www.soinside.com 2019 - 2024. All rights reserved.