www.pudn.com > bkgrd.rar > bkgrd.c


#include  
#include "highgui.h" 
#include "cv.h" 
#include "cxcore.h" 
 
int main() 
{ 
	//声明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(!(pCapture=cvCaptureFromFile("she.avi"))) 
	{ 
		fprintf(stderr,"can not open video file %s\n","she.avi"); 
		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); // copy the current to ForeImage 
            cvConvert(pFrImg,pFrameMat); // copy the ForeImage to Matrix 
             
			cvAbsDiff(pFrameMat,pBkMat,pFrMat); // different the foreImage and the backImage 
 
			cvThreshold(pFrMat,pFrImg,60,255.0,CV_THRESH_BINARY);     //??? 
 
			cvRunningAvg(pFrameMat,pBkMat,0.003,0); 
			cvConvert(pBkMat,pBkImg); 
 
			cvShowImage("video",pFrame); 
			pFrImg->origin = pFrame->origin; 
			pBkImg->origin = pFrame->origin; 
			cvShowImage("background",pBkImg); 
			cvShowImage("foreground",pFrImg); 
 
	     	if(cvWaitKey(10)>=0) 
				break; 
		} 
	} 
         cvDestroyWindow("video"); 
		 cvDestroyWindow("background"); 
		 cvDestroyWindow("foreground"); 
 
		 cvReleaseImage(&pFrImg); 
		 cvReleaseImage(&pBkImg); 
		  
		 cvReleaseMat(&pFrameMat); 
		 cvReleaseMat(&pFrMat); 
		 cvReleaseMat(&pBkMat); 
 
		 cvReleaseCapture(&pCapture); 
		 return 0; 
	}