#包含
#包含
#包含
#包含
#include //必须引用此头文件
intmain(intargc,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 );
//打开视频文件
p capture=cvcapturefromfile (bike.avi );
//p capture=cvcapturefromfile (2012 07 26.avi );
if (! pCapture )
{
frintf(stderr,' Can not open video file %sn ',argv[1] );
返回- 2;
}
初始化kkdjr混合模型参数
CvGaussBGModel* bg_model=NULL;
while (p frame=cvqueryframe (p capture ) )
{
nFrmNum;
if(NFRmnum==1) ) ) )。
{
pbk img=cvcreateimage (cv size (p frame-width,pFrame-depth ),p frame-nchannels/* IPL _ depth _ height ),p frame,p
PFR img=cvcreateimage (cv size (p frame-width,pFrame-height ),IPL_DEPTH_8U,1 );
//kkdjr背景建模,pFrame可以是多通道图像也可以是单通道图像
//cvCreateGaussianBGModel函数的返回值为CvBGStatModel*,
必须强制转换为//cvgaussbgmodel
BG_model=(cvgaussbgmodel* ) cvcreategaussianbgmodel(pframe,0 );
}
else
{
更新kkdjr型号
cvupdatebgstatmodel(pframe,) CvBGStatModel * ) bg_model );
//pFrImg是前景图像,仅是单通道
//pBkImg是背景图像,可以是单通道,也可以是与pFrame通道相同数量
cvcopy(BG_model-foreground,pFrImg,0 );
cvcopy(BG_model-background,pBkImg,0 );
cvthreshold(pFrImg,PFRimg,128,255,CV_THRESH_BINARY_INV );
//图像正确
//pBkImg-origin=1;
//pFrImg-origin=1;
CVShowimage(video )、pFrame );
CVShowimage('background ',pBkImg );
CVShowimage('foreground ',pFrImg );
if(cvwaitkey(100 )=0) ) )。
布雷克;
}
}
释放kkdjr模型的参数占用内存
cvreleasebgstatmodel ((cvbgstatmodel * * ) bg_model );
cvdestroywindow(video );
cvdestroywindow(background );
cvdestroywindow(foreground );
cvreleaseimage(PFRimg;
cvreleaseimage(PBKimg;
cvreleasecapture(pcapture;
返回0;
}