【问题标题】:Differences in outputs from C++ python extension based on python version基于 python 版本的 C++ python 扩展的输出差异
【发布时间】:2018-05-02 00:33:41
【问题描述】:

我最近遇到需要为我的项目的 OpenCV 的 VideoCapture() 识别哪个设备(设备名称)与哪个源输入(设备索引)相关联。

由于我使用的是 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(注意:我的 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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      相关资源
      最近更新 更多