USB免驱*敏*感*词*采集图像【VS2012+opencv+directShow(Cc

优采云 发布时间: 2020-08-10 23:03

  在Opencv英文网站上有关于directShow和opencv结合采集图像的教程,地址:%e4%bd%bf%e7%94%a8DirectShow%e9%87%87%e9%9b%86%e5%9b%be%e5%83%8f

  但是该配置比较老,本文述说怎样基于该教程在 VS2012和opencv2.4.9上进行配置和更改,完成USB*敏*感*词*的驱动。

  博主的USB免驱*敏*感*词*如下:

  

  文末有完整代码的下载地址

  1.环境配置

  在Opencv英文网站上有关于directShow和opencv结合采集图像的教程,地址:%e4%bd%bf%e7%94%a8DirectShow%e9%87%87%e9%9b%86%e5%9b%be%e5%83%8f

  但说明中的“本文档介绍的CCameraDS类调用采集函数可直接返回IplImage,使用更方便,且集成了DirectShow,勿需安装庞大的DirectX/Platform SDK”并不靠谱,DirectShow 似乎早已开始被谷歌给淘汰了,最后存在是在多年前的 DirectX 9.0b 包里。

  注意这儿并不需要下载DirectX 9.0包,下面介绍在VS2012和opencv2.4.9下的配置过程。

  1.1 配置VS2012和opencv环境

  按照网上流行的配置即可,如 。配置好以后尝试运行一个打开图片的小程序检查opencv环境是否配置成功。

  1.2 配置DirectX环境

  新建工程,配置好Opencv环境,随后将从Opencv英文网上下载的 CameraDS.h 和 CameraDS.cpp 文件分别添加到项目的头文件和源文件中。

  VS2012旗舰版是自带了 SDK 的,在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include。

  打开构建的VS2012项目的属性页,找到“VC++目录”,在“收录目录”里添加 (FrameworkSDKDir)Include,在“库目录”里添加(FrameworkSDKDir)Lib。

  发现#include “qedit.h”报错,原因是现今的版本早已没有qedit.h这个头文件了,从网址: 中下载该文件,添加到项目的头文件中。

  2. 运行

  环境配置好以后,可以用 Opencv英文网 上下载的main.cpp运行,运行过程可能碰到const char* 无法转换的问题,将此处的代码除去即可。

  下面是本人编撰的main函数,提供了USB单反的打开、监视、图像捕获功能。

  2.1 查看系统的所有*敏*感*词*状态(initAllCameras函数)

  参数是 CCameraDS 类的对象。该函数获取单反的数量而且显示单反名称。从输出中我们可以找到USB单反的编号,一般情况下编号为1。

  //获取当前可用的*敏*感*词*并打开USB*敏*感*词*

int initAllCameras(CCameraDS &m_CamDS){

//仅仅获取*敏*感*词*数目

int m_iCamCount = CCameraDS::CameraCount();

printf("There are %d cameras.\n", m_iCamCount);

if(m_iCamCount == 0)

{

return -1;

}

//获取所有*敏*感*词*的名称

for(int i = 0; i < m_iCamCount; i++)

{

char szCamName[1024];

int retval = m_CamDS.CameraName(i, szCamName, sizeof(szCamName));

if(retval >0)

{

printf("Camera #%d's Name is '%s'.\n", i, szCamName);

}

else

{

printf("Can not get Camera #%d's name.\n", i);

}

}

return m_iCamCount;

}

  运行结果如下所示:

  There are 3 cameras.

Camera #0's Name is 'Lenovo EasyCamera'.

Camera #1's Name is '3D Camera'.

Camera #2's Name is 'Basler GenICam Source'.

  从运行结果中可以看出,使用的3D相机的编号为1。

  2.2 打开USB单反(openUsbCam函数)

  函数有四个参数,第一个参数为CcameraDS类的对象,camNum设置为1,表明如今要打开的USB单反,而不是笔记本自带单反。camWidth和camHeight按照自己所使用单反的情况进行设置,设置为图象的长度和高度。

  代码如下:

<p>// 打开 USB 相机 !! 在调用 camDisplay 和 camCapPic 之前必须调用该函数

// camNum = 1; // *敏*感*词*编号为1,表示当前要使用的是 USB *敏*感*词*

// camWidth = 2560; // 图片宽度

// camHeight = 720; // 图片高度

int openUsbCam(CCameraDS &m_CamDS, const int camNum=1, const int camWidth=2560, const int camHeight = 720){

// 获取当前可用的相机个数

// 在所有的相机中,一般编号为 0 的为电脑自带*敏*感*词*,编号为 1 的为要使用的 USB *敏*感*词*

int m_iCamCount = initAllCameras(m_CamDS);

if(m_iCamCount == -1){

cout

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线