基于python版本的C++python扩展的输出差异
Differences in outputs from C++ python extension based on python version
我最近遇到了为我的项目识别OpenCV的VideoCapture()的哪个设备(设备名称)与哪个源输入(设备索引)相关联的需要。
由于我使用的是OpenCV的Python端口(根据PyCharm,v3.3.0.10),根据我的研究工作,有各种后端功能显然无法从Python中进行操作。
在Windows 10 Home 64位上,使用Python 3.6.3,我发现了肖玲所做的这项方便的工作,它创建了一个专门的Python2扩展程序来满足我的需求。在使用Python3的文档对C++文件进行了rustling以使其与Python3兼容之后,它成功地编译了。然后我进行了一次测试,结果达到了我的预期。
完全出于好奇,并且手头有Python 2.7.14(注意:根据PyCharm的说法,我的Python2也安装了OpenCV v3.3.0.10),我继续使用相同的setup.py为Python2编译了相同的C++扩展。它编译成功了,然后,我运行了相同的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
而且,Python 2的结果…也"正确":
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
我的笔记本电脑上的摄像头设置如下:
- 我的笔记本电脑的集成摄像头
- 我的手机(华为P9)使用DroidCamX(v6.4.8)
注意:DroidCamX有一个桌面应用程序,可以与Android DroidCamX应用程序配合使用
注意2:我通过(物理/有线)USB连接使用DroidCamX
事实上,我只使用了两个物理相机——(预期的)设备索引0
和1
——这使得Python3的输出完全正确,因此可以按预期工作。然而,使用Python2,当我访问设备索引2-4
时,所有这些都会从我的手机返回一个"正确"的视频提要,包括指定240p视频提要的索引4
。
因此,我的问题;为什么Python2和Python3的输出不同?为什么Python2显示了3个其他可用的视频源(看起来都是"正确的")?
注意:"正确"是指在正确的模式下使用正确的物理设备,尽管在物理相机的数量方面不正确
注意2:所有代码都使用超链接链接到此问题,以尽量缩短此问题的长度
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 为什么我的代码在输出中增加了93天
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 复制C DLL以构建任何C#项目的输出,以扩展为参考
- 基于python版本的C++python扩展的输出差异
- 在 Buck 中,如何扩展 genrule 输出目录
- 我想获得输出2^64,而C 中没有任何扩展
- 流式输出扩展 ASCII
- 扩展内联汇编:输入和输出相同的变量