#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <cvaux.h>//必须引此头文件
int
main(
int
argc,
char
** argv )
{
IplImage* pFrame = NULL;
IplImage* pFrImg = NULL;
IplImage* pBkImg = 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
(argc == 2)
if
( !(pCapture = cvCaptureFromFile(argv[1])))
{
fprintf
(stderr,
"Can not open video file %sn"
, argv[1]);
return
-2;
}
if
(argc == 1)
if
( !(pCapture = cvCaptureFromCAM(-1)))
{
fprintf
(stderr,
"Can not open camera.n"
);
return
-2;
}
CvGaussBGModel* bg_model=NULL;
while
(pFrame = cvQueryFrame( pCapture ))
{
nFrmNum++;
if
(nFrmNum == 1)
{
pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,3);
pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
bg_model = (CvGaussBGModel*)cvCreateGaussianBGModel(pFrame, 0);
}
else
{
cvUpdateBGStatModel(pFrame, (CvBGStatModel *)bg_model );
cvCopy(bg_model->foreground,pFrImg,0);
cvCopy(bg_model->background,pBkImg,0);
pBkImg->origin=1;
cvShowImage(
"video"
, pFrame);
cvShowImage(
"background"
, pBkImg);
cvShowImage(
"foreground"
, pFrImg);
if
( cvWaitKey(2) >= 0 )
break
;
}
}
cvReleaseBGStatModel((CvBGStatModel**)&bg_model);
cvDestroyWindow(
"video"
);
cvDestroyWindow(
"background"
);
cvDestroyWindow(
"foreground"
);
cvReleaseImage(&pFrImg);
cvReleaseImage(&pBkImg);
cvReleaseCapture(&pCapture);
return
0;
}
</cvaux.h></highgui.h></cxcore.h></cv.h></stdio.h>