⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bkgrd.c

📁 OpenCV的各类例子
💻 C
字号:
#include <stdio.h>#include <cv.h>#include <highgui.h>int main( int argc, char** argv ){  //声明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;  //创建窗口  cvNamedWindow("video", 1);  cvNamedWindow("background",1);  cvNamedWindow("foreground",1);  //使窗口有序排列  cvMoveWindow("video", 30, 0);  cvMoveWindow("background", 360, 0);  cvMoveWindow("foreground", 690, 0);  if( argc != 2 )    {      fprintf(stderr, "Usage: bkgrd <video_file_name>\n");      return -1;    }  //打开视频文件  if( !(pCapture = cvCaptureFromFile(argv[1])))    {      fprintf(stderr, "Can not open video file %s\n", argv[1]);      return -2;    }    //逐帧读取视频  	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);		}      	else		{	  		cvCvtColor(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);	  		//显示图像	  		cvShowImage("video", pFrame);	  		cvShowImage("background", pBkImg);	  		cvShowImage("foreground", pFrImg);	  		//如果有按键事件,则跳出循环	  		//此等待也为cvShowImage函数提供时间完成显示	  		//等待时间可以根据CPU速度调整	  		if( cvWaitKey(2) >= 0 )	    		break;		}  // end of if-else    } // end of while-loop  	//销毁窗口  	cvDestroyWindow("video");  	cvDestroyWindow("background");  	cvDestroyWindow("foreground");  	//释放图像和矩阵  	cvReleaseImage(&pFrImg);  	cvReleaseImage(&pBkImg);  	cvReleaseMat(&pFrameMat);  	cvReleaseMat(&pFrMat);  	cvReleaseMat(&pBkMat);  	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -