最近需要使用多个摄像头来进行视频分析,有一个问题就是如何获取目前主机上有多少个摄像头。网上看了下,用VideoInput这个开源库的居多,但是还要引入这个库以及一些附加的依赖库,显得较为麻烦。其实在opencv中已经封装了这个库,但是封装的比较厉害,我需要的获取摄像头个数的接口就在里面。最后就只能改源码了。做个笔记,以防下次再次使用。
测试平台:win7(32)+vs2010+opencv2.4.9
使用前提:opencv2.4.9可以正常在vs2010上运行(即原先的配置是正确的)
工程以及编译好的头文件和库的下载地址在文章的末尾。
下面是修改过程:
步骤一:在源文件cap_dshow.cpp中的类CvCaptureCAM_DShow中增加两个函数,分别为:
virtual intreDeviceCount();//返回摄像头为数量
virtual std::string reDeviceName(intdeviceId);//返回摄像头ID对应的名字
class CvCaptureCAM_DShow : public CvCapture
{
public:
<span style="white-space:pre"> </span>CvCaptureCAM_DShow();
<span style="white-space:pre"> </span>virtual ~CvCaptureCAM_DShow();
...
<span style="white-space:pre"> </span>virtual int reDeviceCount();//返回摄像头的数量
<span style="white-space:pre"> </span>virtual std::string reDeviceName(int deviceId);//返回摄像头ID对应的名字
...
};
实现这两个函数: