2012-02-14 188 views
13

我正在使用OpenCV2.2和videoInput。我想升級到OpenCV2.3.1,其中videoInput已經被合併到OpenCV2.3中。如何使用opencv獲取網絡攝像頭設備列表?

我的問題是,似乎沒有listdevices()函數返回所有可用的視頻源。

有人知道新的等價物嗎?

+0

你可以把完整的代碼呢?我試圖列出所有攝像頭設備,但未成功 – 2016-10-14 12:09:44

回答

2

請參閱this StackOverflow答案。它目前不被OpenCV支持,因爲它是跨平臺的,並且相機枚舉是非常特定於平臺的(例如,v4l2枚舉與DirectShow不同)。但是,有人在返回時提交了針對版本2.2的enhancement request

10

正如你所說videoinput自2.3rc以來已被合併在OpenCV中。

看着相關的source視頻輸入看起來像在OpenCV changelog中指定的highgui。雖然您的OpenCV是否是在啓用它的情況下構建的,但它是Cmake中的一個可配置選項(選項爲WITH_VIDEOINPUT,並且還要求它是WIN32版本,請參閱here)。

OpenCV在內部調用listdevices作爲VI.listDevices()執行CvCaptureCAM_DShow::open,videoInput類是CvCaptureCAM_DShow的受保護成員。

可以使用

CvCapture* capture = cvCaptureFromCAM(CV_CAP_DSHOW); 
capture->VI.listDevices(); 
+1

啓用VI的CMAKE選項是什麼?你能解釋一下嗎?我使用dyour示例代碼片斷。它說VI不是一個有效的對象。 – 2vision2 2013-07-02 05:38:41

1

我編寫了一個類,允許使用的DirectShow接口和枚舉枚舉所有的設備可以訪問listdevices功能。雖然它只能在Windows上運行,但它可以讓您獲取「友好設備名稱」列表以及您需要創建的id,例如VideoCapture對象。

的代碼是在這裏:

https://github.com/studiosi/OpenCVDeviceEnumerator

相關問題