如何使用 opencv 获取网络摄像头设备列表?
Posted
技术标签:
【中文标题】如何使用 opencv 获取网络摄像头设备列表?【英文标题】:How do I get a list of webcam devices using opencv? 【发布时间】:2012-02-14 11:52:14 【问题描述】:我正在使用带有 videoInput 的 OpenCV2.2。我想升级到 OpenCV2.3.1,其中 videoInput 显然已合并到 OpenCV2.3。
我的问题是似乎没有 listdevices() 函数来返回所有可用的视频源。
有人知道新的等价物吗?
【问题讨论】:
你能放出完整的代码吗?我正在尝试列出所有网络摄像头设备,但未成功 【参考方案1】:正如你所说,自 2.3rc 以来,videoinput 已合并到 OpenCV 中。
查看相关的 source 视频输入似乎是在 OpenCV 更改日志指定的 highgui 中。虽然您的 OpenCV 是否在启用的情况下构建是 Cmake 中的一个可配置选项(该选项是 WITH_VIDEOINPUT
并且还要求它是 WIN32 构建,请参阅 here)。
OpenCV 在内部调用 listdevices 作为 VI.listDevices()
在 CvCaptureCAM_DShow::open
的实现中,并且 videoInput 类是 CvCaptureCAM_DShow 的受保护成员。
您可以使用访问 listdevices 功能
CvCapture* capture = cvCaptureFromCAM( CV_CAP_DSHOW );
capture->VI.listDevices();
【讨论】:
启用 VI 的 CMAKE 选项是什么?你能解释一下吗?我尝试了您的示例代码 sn-p。它说 VI 不是一个有效的对象。【参考方案2】:请参阅this *** 的答案。 OpenCV 目前不支持它,因为它是跨平台的,并且相机枚举非常特定于平台(例如,v4l2 的枚举与 DirectShow 不同)。但是,不久前有人针对 2.2 版提交了enhancement request。
【讨论】:
【参考方案3】:我编写了一个类,允许使用 DirectShow 接口和枚举器枚举所有设备。虽然它只适用于 Windows,但它允许您获取“友好设备名称”列表和您需要创建的 id,例如 VideoCapture 对象。
代码在这里:
https://github.com/studiosi/OpenCVDeviceEnumerator
【讨论】:
以上是关于如何使用 opencv 获取网络摄像头设备列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpenCV 中使用网络摄像头捕获 Mat 图像的像素值