VS 2010在MFC中用opencv实现对视频中动态目标的追踪_第1页
VS 2010在MFC中用opencv实现对视频中动态目标的追踪_第2页
VS 2010在MFC中用opencv实现对视频中动态目标的追踪_第3页
VS 2010在MFC中用opencv实现对视频中动态目标的追踪_第4页
VS 2010在MFC中用opencv实现对视频中动态目标的追踪_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Visual Studio2010在MFC中用opencv实现对视频中动态目标的追踪第二步,建立一个MFC的对话框程序,做两个按钮,一个“打开视频文件”,一个“运动跟踪处理”。具体操作:1 建立MFC对话框程序的框架:File -New - MFC AppWizard(exe),选取工程路径,并取工程名“VideoProcesssing”- Next - 选择Dialog based后,去掉使用Unicode库的勾,选择在静态库中使用 MFC,点Finish,点OK.2 添加按钮:直接Delete掉界面默认的两个“确定”“取消”按钮。然后添加两个button,分别名为“打开视频”,“运动跟踪处理”,其ID分别设为IDC_OPEN_VIDEO,IDC_TRACKING.3 添加消息响应函数:双击按钮“打开视频文件”,自动生成响应函数名OnOpenVideo,点Ok。然后添加如下代码:CFileDialog dlg(true,*.avi,NULL,NULL,*.avi|*.avi|);if (dlg.DoModal()=IDOK)strAviFilePath = dlg.GetPathName();elsereturn;同样,双击“运动跟踪处理”按钮,选择默认的响应函数名,然后添加代码:/声明IplImage指针IplImage* pFrame = NULL;IplImage* pFrImg = NULL;IplImage* pBkImg = NULL;CvMat* pFrameMat = NULL;CvMat* pFrMat = NULL;CvMat* pBkMat = NULL;CvCapture* pCapture = NULL;int nFrmNum = 0;/打开AVI视频文件if(strAviFilePath=) /判断文件路径是否为空MessageBox(请先选择AVI视频文件!);return;elseif(!(pCapture = cvCaptureFromFile(strAviFilePath)MessageBox(打开AVI视频文件失败!);return;/创建窗口cvNamedWindow(Video, 1);cvNamedWindow(Background,1);cvNamedWindow(Foreground,1);/使窗口有序排列,窗口宽330cvMoveWindow(Video, 30, 0);cvMoveWindow(Background, 360, 0);cvMoveWindow(Foreground, 690, 0);/逐帧读取视频while(pFrame = cvQueryFrame( pCapture )nFrmNum+;/如果是第一帧,需要申请内存,并初始化if(nFrmNum = 1)pBkImg = cvCreateImage(cvSize(pFrame-width, pFrame-height), IPL_DEPTH_8U,1); / 存放背景图像(灰度)pFrImg = cvCreateImage(cvSize(pFrame-width, pFrame-height), IPL_DEPTH_8U,1); / 存放中间图像(灰度)pBkMat = cvCreateMat(pFrame-height, pFrame-width, CV_32FC1);pFrMat = cvCreateMat(pFrame-height, pFrame-width, CV_32FC1);pFrameMat = cvCreateMat(pFrame-height, pFrame-width, CV_32FC1);/转化成单通道图像再处理(灰度)cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);cvConvert(pFrImg, pFrameMat);cvConvert(pFrImg, pFrMat);cvConvert(pFrImg, pBkMat);elsecvCvtColor(pFrame, pFrImg, CV_BGR2GRAY); /转化成单通道图像再处理(灰度)cvConvert(pFrImg, pFrameMat);/高斯滤波先,以平滑图像/cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0);/当前帧跟背景图相减(求背景差并取绝对值)cvAbsDiff(pFrameMat, pBkMat, pFrMat);/二值化前景图(这里采用特定阈值进行二值化)cvThreshold(pFrMat, pFrImg, 60, 255.0, CV_THRESH_BINARY);/进行形态学滤波,去掉噪音cvErode(pFrImg, pFrImg, 0, 1);cvDilate(pFrImg, pFrImg, 0, 1);/滑动平均更新背景(求平均)cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);/将背景转化为图像格式,用以显示cvConvert(pBkMat, pBkImg);/ 保持原图像的旋转方向pBkImg-origin = pFrImg-origin = pFrame-origin;/显示图像cvShowImage(Video, pFrame);cvShowImage(Background, pBkImg);cvShowImage(Foreground, pFrImg);/如果有按键事件,则跳出循环/此等待也为cvShowImage函数提供时间完成显示/等待时间可以根据CPU速度调整if( cvWaitKey(200) = 0 )break;/销毁窗口cvDestroyWindow(Video);cvDestroyWindow(Background);cvDestroyWindow(Foreground);/释放图像和矩阵cvReleaseImage(&pFrImg);cvReleaseImage(&pBkImg);cvReleaseMat(&pFrameMat);cvReleaseMat(&pFrMat);cvReleaseMat(&pBkMat);cvReleaseCapture(&pCapture);4 选fileview选项卡中VideoProcessingDlg.h,在CVideoProcessingDlg类中添加公有类成员:CString strAviFilePath;5 选fileview选项卡中VideoProcessingDlg.cpp,添加opencv头文件#include cv.h#include highgui.h#include cxcore.h6 编译执行,成功!还可以添加一个”录制视频”的按钮,修改ID号为IDC_RECORD, 双击“录制视频”按钮,选择默认的响应函数名,然后添加代码:CvCapture* capture=cvCaptureFromCAM(-1); /打开摄像头 CvVideoWriter* video=NULL; IplImage* frame=NULL; int n; if(!capture) /如果不能打开摄像头给出警告 coutCan not open the camera.width,frame-height); /创建CvVideoWriter对象并分配空间 /保存的文件名为camera.avi,编码要在运行程序时选择,大小就是摄像头视频的大小,帧频率是32 if(video) /如果能创建CvVideoWriter对象则表明成功 coutVideoWriter has created.endl; cvNamedWindow(Camera Video,1); /新建一个窗口 int i = 0; while(i = 200) / 让它循环200次自动停止录取 frame=cvQueryFrame(capture); /从CvCapture中获得一帧 if(!frame) coutCan not get frame from the capture.endl; break; n=cvWriteFrame(video,frame); /判断是否写入成功,如果返回的是1,表示写入成功 coutn0) break; /有其他键盘响应,则退出 cvReleaseVideoWriter(&video); cvReleaseCapture(&capture); cvDestroyWindow(Camera Video); return ; 第二步,建立一个编程环境,然后加载opencv的库路径等等。具体步骤如下。PATH D:OpenCV2.3.1buildOPENCV D:OpenCV2.3.1buildx86vc10bin如下图所示。 配置VS2010,选择“视图”“其他窗口”“属性管理器”,如下图所示。 双击Debug | Win32下的“Microsoft.Cpp.Win32.user”,如下图所示。 在弹出的配置框中配置,选择“VC+目录”。1、在“包含目录”中的结尾处(若结尾处无英文状态下的“;”则需自行添加“;”,下同)加入以下内容添加以下内容:$(opencv)includeopencv;$(opencv)includeopencv2;$(opencv)include;2、在库目录中的结尾处加入以下内容添加:$(opencv)x86vc10lib;注:$(opencv)includeopencv是告诉VC去“opencv”这个变量中的文件夹下的includeopencv路径中找OpenCV的库文件目录。如下图所示。 在“链接器”-“输入”-“附加依赖选项”中的结尾处加入以下内容:$(opencv)x86vc10libopencv_core231d.lib;$(opencv)x86vc10libopencv_highgui231d.lib;$(op

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论