我最近遇到需要確定哪個設備(設備名稱)與我的項目的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的documentation與C++ 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
我的相機設置如下:
- 我的筆記本電腦的集成攝像頭
- 我的手機(華爲P9)使用DroidCamX (v6.4.8)。
注意:DroidCamX有一個桌面應用程序,與Android DroidCamX應用程序結合使用。
注2:我通過(物理/有線)USB連接使用DroidCamX。
我INFACT,僅使用2個物理相機 - (預期)設備索引0
和1
- 這使得Python3的輸出完全正確的,並且因此如預期工作。但是,使用Python2時,當我訪問設備索引2-4
時,所有人都會從我的手機返回「正確」視頻饋送 - 包括索引4
,該索引指定240p視頻饋送。
因此,我的問題;爲什麼Python2和Python3的輸出有所不同?爲什麼Python2會顯示3個其他可用的視頻供稿(這些視頻都似乎「正確」)?
注意:「正確」是指在正確模式下使用正確的物理設備,儘管對於物理攝像機的數量不正確。
注2:所有代碼都使用超鏈接鏈接到此問題,以儘量減少此問題的長度。