用mfc做目标跟踪界面

本文介绍如何在MFC对话框的picture控件中显示Opencv摄像头视频,并实现Camshift目标跟踪算法。通过设置定时器替代while循环,完成视频帧的更新。此外,还提供了基于此程序实现截图和保存视频的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://hi.baidu.com/gilbertjuly/item/4770e5c303caf17fced4f818

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

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

主要步骤为:
1.建立对话框工程并设置对话框布局
用mfc做目标跟踪界面
注意对话框中间的是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的鼠标消息响应函数。

运行结果为:
用mfc做目标跟踪界面

本程序下载地址: download.youkuaiyun.com/source/1617559

编译环境:winxp vc6.0 需opencv库支持
camshift算法的原理见: hi.baidu.com/gilbertjuly/blog/item/546a1b00dd93970f1c9583ff.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zlingh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值