如何使用opencv获取网络摄像头设备列表?

时间:2012-02-14 11:52:14

标签: c++ windows opencv

我正在使用带有videoInput的OpenCV2.2。我想升级到OpenCV2.3.1,其中videoInput显然已合并到OpenCV2.3中。

我的问题是似乎没有listdevices()函数来返回所有可用的视频源。

有人知道新的等价物吗?

3 个答案:

答案 0 :(得分:10)

正如你所说,自2.3rc以来,videoinput已在OpenCV中合并。

查看相关的source视频输入似乎是在OpenCV更改日志指定的highgui中。虽然你的OpenCV是否是在启用它的情况下构建的,但是Cmake中的可配置选项(选项为WITH_VIDEOINPUT并且还要求它是WIN32版本,请参阅here)。

OpenCV在VI.listDevices()的实现中将listdevices内部调用为CvCaptureCAM_DShow::open,并且videoInput类是CvCaptureCAM_DShow的受保护成员。

您可以使用

获取访问列表设备功能
 CvCapture* capture = cvCaptureFromCAM( CV_CAP_DSHOW );
 capture->VI.listDevices();

答案 1 :(得分:2)

请参阅this StackOverflow答案。 OpenCV目前不支持它,因为它是跨平台的,并且摄像机枚举是非常特定于平台的(例如,v4l2枚举与DirectShow不同)。但是,有人在一段时间内提交了enhancement request版本2.2。

答案 2 :(得分:1)

我编写了一个类,它允许使用DirectShow接口和枚举器枚举所有设备。虽然它只适用于Windows,但它允许您获取友好设备名称列表"和您需要创建的ID,例如VideoCapture对象。

代码在这里:

https://github.com/studiosi/OpenCVDeviceEnumerator