http://hi.baidu.com/gilbertjuly/item/4770e5c303caf17fced4f818
在MFC对话框的控件中显示Opencv摄像头视频+Camshift跟踪算法实现
一般用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的响应函数。
01 void COpencvUIDlgDlg::OnOpencamera() //打开摄像头按钮的响应函数
02 {
03
// TODO: Add your control notification handler code here
04
m_Video=cvCreateCameraCapture(-1);//打开摄像头
05
06
if (!m_Video)
07
return;
08
09
SetTimer(1,100,NULL);//设置定时器
10 }
11
12 void COpencvUIDlgDlg::OnTimer(UINT nIDEvent) //定时器的响应函数
13 {
14
// TODO: Add your message handler code here and/or call default
15
//
KillTimer(nIDEvent);
16
m_Frame=cvQueryFrame(m_Video);//m_Frame是IplImage指针类型
17
m_CvvImage.CopyOf(m_Frame,1);//m_CvvImage是CvvImage类型
18
m_CvvImage.DrawToHDC(hDC, &rect);
19
//将CvvImage显示在picture控件中,hDC是picture控件的句柄.rect是picture的区域.
20
b_flagProcess=1;
21
22
CDialog::OnTimer(nIDEvent);
23 }
4.加入截图和保存视频功能。
本程序下载地址: http://download.youkuaiyun.com/source/1617588
---------------------------------------------------------------------------------------------------------------------------------
可以对本程序进行二次开发,下面实现在上述程序的基础上实现Camshift跟踪算法。
Opencv中自带Camshift跟踪算法的实现(OpenCV\samples\c\camshiftdemo.c),不过是基于console的,在MFC中实现则不能用其本来的鼠标回调函数来定位目标,而要改用MFC的鼠标消息响应函数。
运行结果为:
本程序下载地址: download.youkuaiyun.com/source/1617559
编译环境:winxp vc6.0 需opencv库支持
camshift算法的原理见: hi.baidu.com/gilbertjuly/blog/item/546a1b00dd93970f1c9583ff .html
主要步骤为:
1.建立对话框工程并设置对话框布局

注意对话框中间的是picture控件用于显示视频。
2.和console的程序一样,设置opencv库环境,加入opencv头文件,并定义所需要的变量。
3.关键的是这一步,定义CvvImage类型的变量m_CvvImage,这个类型的变量里有函数DrawToHDC能在MFC的控件中显示视频。
还有一个关键的一步是设置定时器timer,MFC中不用while循序来更新每帧视频,取而代之的是在定时器timer的响应函数中实现视频的更新,在本程序中每100毫秒进入一次定时器,定时器响应时间可以更改。
这里给出“打开摄像头”和定时器timer的响应函数。
01 void COpencvUIDlgDlg::OnOpencamera() //打开摄像头按钮的响应函数
02 {
03
04
05
06
07
08
09
10 }
11
12 void COpencvUIDlgDlg::OnTimer(UINT nIDEvent) //定时器的响应函数
13 {
14
15
16
17
18
19
20
21
22
23 }
4.加入截图和保存视频功能。
本程序下载地址: http://download.youkuaiyun.com/source/1617588
---------------------------------------------------------------------------------------------------------------------------------
可以对本程序进行二次开发,下面实现在上述程序的基础上实现Camshift跟踪算法。
Opencv中自带Camshift跟踪算法的实现(OpenCV\samples\c\camshiftdemo.c),不过是基于console的,在MFC中实现则不能用其本来的鼠标回调函数来定位目标,而要改用MFC的鼠标消息响应函数。
运行结果为:

本程序下载地址: download.youkuaiyun.com/source/1617559
编译环境:winxp vc6.0 需opencv库支持
camshift算法的原理见: hi.baidu.com/gilbertjuly/blog/item/546a1b00dd93970f1c9583ff