机器视觉实验四报告运动和检测.docx

实验四报告 运动分析和检测 实验目的 采用帧间差分法和累积差图像法对运动物体进行运动分析,并将分析结果用:矢量场、运动矢量直方图和运动轨迹等三种运动表达法表示。 二、实验设备 微机 三、实验内容及步骤 采用帧间差分法和累积差图像法对运动物体进行运动分析,并将分析结果用:矢量场、运动矢量直方图和运动轨迹等三种运动表达法表示。 实验原理见第7章ppt,实验图片自己网上下载 上机编写程序。 调试程序。 根据实验结果,撰写实验报告。 四、实验报告 1.源代码 //下面的函数用以检测视频中运动的目标 void CtraceDlg::OnBnClickedTracing() { IplImage* pFrame=NULL;//声明当前帧 IplImage* pFrImg=NULL;//声明前景图像 IplImage* pBkImg=NULL;//声明背景图像 //声明对应的图像矩阵 CvMat* pFrameMat=NULL; CvMat* pFrMat=NULL; CvMat* pBkMat=NULL; CvCapture* pCapture=NULL; //声明视频捕捉器,用以读取视频内容 int nFrmNum=0; if(!(pCapture=cvCaptureFromFile(aviFilePath))) { MessageBox(_T(请先打开视频文件)); return; } //create video windows cvNamedWindow(Video,1); cvNamedWindow(Background,1); cvNamedWindow(Foreground,1); cvMoveWindow(Video, 30, 0); cvMoveWindow(Background, 360, 0); cvMoveWindow(Foreground, 690, 0); //read every frame 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(pBackground, pBkMat); } else { cvCvtColor(pFrame,pFrImg,CV_BGR2GRAY); cvConvert(pFrImg,pFrameMat); //高斯滤波 cvSmooth(pFrameMat,pFrameMat,CV_GAUSSIAN,3,0,0,0); //当前帧减去背景图像并取绝对值 cvAbsDiff(pFrameMat,pBkMat,pFrMat); //二值化前景图像 cvThreshold(pFrMat, pFrImg, 20, 255.0, CV_THRESH_BINARY); //形态学滤波,去噪 cvErode(pFrImg, pFrImg, 0, 1); cvDilate(pFrImg, pFrImg, 0, 2); cvErode(pFrImg,pFrImg,0,1); //滑动平均更新背景(求平均) cvRunningAvg(pFr

文档评论(0)

1亿VIP精品文档

相关文档