2013-01-19 35 views
2

我正在研究需要與許多不同的USB攝像頭通信的Windows Python 2.7應用程序。我一直在使用OpenCV,但對於一些科學攝像頭,默認的幀速率,捕捉格式等沒有被檢測到,我只能得到一個空白圖像。可以打開DirectShow屬性頁的外部程序可以在我的程序中修復此問題,但我希望在我的應用程序中具有此功能。在Python中的Webcam DirectShow屬性頁

我試過一個可用的Python庫來做到這一點:VideoCapture(http://videocapture.sourceforge.net/)。雖然這會打開屬性頁面,但它不允許更改任何設備設置(「連接錯誤...此格式當前不可用」,但AMCAP正常工作)。我想知道底層代碼是否過時。

在VideoCapture或videoInput(http://www.muonics.net/school/spring05/videoInput/)中播放C++代碼並不是很有幫助,因爲它們都依賴於傳播大量舊的特定DirectX的舊庫/ WindowsSDK包。不幸的是,我沒有足夠的知識或時間從頭開始或找出VideoCapture出了什麼問題。

是否有另一個已經組裝好的Python軟件包可以做到這一點?我一直在尋找一段時間,現在很幸運。我看了一下libvlc的python綁定(因爲VLC可以訪問屬性頁)和DirectPython,但是我不清楚這些是我正在尋找的。

謝謝!

+0

對舊的DirectX/WindowsSDK包的依賴不是一個大問題;它將繼續在較新版本的Windows上工作。 – wimh

+0

這非常幸運,但是這使得很難嘗試重新編譯這些舊庫。我不認爲我能夠找到所有東西,並把它放在正確的地方。即使這一切都已經建立起來,但我沒有足夠的知識來修復代碼,而沒有花很長時間來學習它。不幸的是我現在無法做到這一點。 現在,如果有一個已經有效的C++實用程序庫,有人寫了,可以工作(不是VideoCapture),那麼我可以將它鏈接到Python ... – blarg

回答

0

自從我這方面的更多最近的工作,我能爲有興趣的人提供一個部分回答我自己的問題:

videoInput庫包含在OpenCV直接顯示的實現。由於沒有代碼,因此可以使用videoInput庫打開視頻屬性頁面(增益,曝光等),但不能打開視頻設置頁面(其具有捕獲格式,圖像大小,幀速率等)。可以使用Cython在Python中與此庫進行接口,而不會有太多問題。

OpenCV的Python綁定可用於訪問Direct Show視頻屬性頁面。這需要:

  1. 使用直接顯示驅動器在打開照相機裝置時,通過將值CV_CAP_DSHOW到索引(無蟒恆定,使用價值700)。
  2. 調用窗口使用(無證)propID CV_CAP_PROP_SETTINGSVideoCapture::set(int propID, ...)中顯示。再次,此常數是不是在Python綁定,所以使用該值37(從highgui_c.h)

(這些指令作爲工作的OpenCV 2.4.6的,希望更多的常量將來到Python綁定)

0

我有一個類似的冠冕堂皇的問題。基本上,我不小心通過想要查看我捕獲的內容來修復它。

cap = cv2.VideoCapture(0) 
print cap.read()  #once to inialize 
print cap.read()  #twice to check that it actually initialized 

第一.read()返回(False, None)而第二個實際上具有進料。在添加之前,我會通過Nonecv2.imshow('title',frame),我的程序會崩潰。

我不知道這是否能解決您的問題。我的DinoLite USB顯微鏡,我想我只是通過DirectX訪問它。 OpenCV 2.4.8。