本教程详细介绍如何在Microsoft Foundation Classes (MFC)环境中集成OpenCV库,实现从摄像头实时抓取视频流并显示的功能。适合希望将计算机视觉技术融入Windows应用程序开发中的开发者参考学习。
一、使用DirectShow获取摄像头视频
在Visual Studio 2005开发环境下利用DirectShow进行操作的步骤如下:
1. 将CameraDS.h 和 CameraDS.cpp 文件复制到你的项目中;
2. 把DirectShow文件夹添加至OpenCV根目录,并通过菜单工具 -> 选项 -> 项目和解决方案 -> vc++目录,把包含文件路径设置为你的opencv安装目录下的DirectShow/Include;
3. 同样在vc++目录下将库文件的路径配置为你opencv安装目录中的DirectShow/Lib。
获取视频流的具体步骤如下:
- 使用CameraDS类提供的OpenCamera方法打开摄像头;
- 利用QueryFrame函数来抓取每一帧图像数据。
二、使用CvvImage类显示摄像头视频
在较高版本的OpenCV库中,由于不再包含CvvImage类,因此需要手动添加头文件(CvvImage.h)和代码文件 (CvvImage.cpp)。
1. 在MFC界面设计阶段加入一个picture控件,并将其ID设置为IDC_VIEW1。
2. 对话框头部声明如下变量:
- CRect rect1;
- CStatic* pStc1;
- CDC* pDC1;
- HDC hDC1;
3. 初始化上述定义的变量,在对话框源文件OnInitDialog函数中进行操作:
```cpp
pStc1=(CStatic *)GetDlgItem(IDC_VIEW1);
pStc1->GetClientRect(&rect1);
pDC1=pStc1->GetDC();
hDC1=pDC1->GetSafeHdc();
```
显示视频帧的具体方法如下:
- 定义一个 CvvImage 类型的变量 m_CvvImage;
- 使用 CopyOf 方法将当前获取到的一帧图像拷贝给m_CvvImage对象; //frame是视频帧
- 调用 DrawToHDC 函数,利用hDC1和rect1参数在picture控件上绘制显示该帧。
以上操作所需的全部文件已包含在附件中。