2017-11-18 162 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和集成攝像頭使用全面的內核驅動程序。