搜档网
当前位置:搜档网 › 在MFC对话框的控件中显示Opencv摄像头视频+Camshift跟踪算法实现

在MFC对话框的控件中显示Opencv摄像头视频+Camshift跟踪算法实现

在MFC对话框的控件中显示Opencv摄像头视频+Camshift跟踪算法实现
在MFC对话框的控件中显示Opencv摄像头视频+Camshift跟踪算法实现

在MFC对话框的控件中显示Opencv摄像头视频+Camshift跟踪算法实现

2010-05-07 16:31

一般用opencv显示视频,都用cvNamedWindow新建窗口,并且在while循环中更新每一帧视频,由于窗口是opencv自己创建的,所以在VC中很难对其进行控制,出于这个目的,希望能将视频显示在VC能够控制的部件中。这里给出一个实例说明如何在MFC对话框的picture控件中显示摄像头视频。

主要步骤为:

1.建立对话框工程并设置对话框布局

注意对话框中间的是picture控件用于显示视频。

2.和console的程序一样,设置opencv库环境,加入opencv头文件,并定义所需要的变量。

3.关键的是这一步,定义CvvImage类型的变量m_CvvImage,这个类型的变量里有函数DrawToHDC能在MFC的控件中显示视频。

还有一个关键的一步是设置定时器timer,MFC中不用while循序来更新每帧视频,取而代之的是在定时器timer的响应函数中实现视频的更新,在本程序中每100毫秒进入一次定时器,定时器响应时间可以更改。

这里给出“打开摄像头”和定时器timer的响应函数。

01void COpencvUIDlgDlg::OnOpencamera() //打开摄像头按钮的响应函数

02{

03// TODO: Add your control notification handler code here

04m_Video=cvCreateCameraCapture(-1);//打开摄像头

05

06if (!m_Video)

07return;

08

09SetTimer(1,100,NULL);//设置定时器

10}

11

12void COpencvUIDlgDlg::OnTimer(UINT nIDEvent) //定时器的响应函数

13{

14// TODO: Add your message handler code here and/or call default 15// KillTimer(nIDEvent);

16m_Frame=cvQueryFrame(m_Video);//m_Frame是IplImage指针类型

17m_CvvImage.CopyOf(m_Frame,1);//m_CvvImage是CvvImage类型

18m_CvvImage.DrawToHDC(hDC,&rect);

19//将CvvImage显示在picture控件中,hDC是picture控件的句柄.rect是picture的区域.

20b_flagProcess=1;

21

22CDialog::OnTimer(nIDEvent);

23}

4.加入截图和保存视频功能。

本程序下载地址:https://www.sodocs.net/doc/6b937586.html,/source/1617588

---------------------------------------------------------------------------------------------------------------------------------

可以对本程序进行二次开发,下面实现在上述程序的基础上实现Camshift跟踪算法。

Opencv中自带Camshift跟踪算法的实现(OpenCV\samples\c\camshiftdemo.c),不过是基于console的,在MFC中实现则不能用其本来的鼠标回调函数来定位目标,而要改用MFC的鼠标消息响应函数。

运行结果为:

本程序下载地址:https://www.sodocs.net/doc/6b937586.html,/source/1617559

相关主题