Emgu 版本:
代码privatevoidbutton1_Click(objectsender, EventArgs e)
{
Emgu.CV.Capture cap=newCapture("d:\1.wmv");
Emgu.CV.VideoSurveillance.BGStatModel<Bgr>bg=null; ;
Capture c=newCapture("d:\1.wmv");
Image<Bgr,byte>img=null;
while((img=c.QueryFrame())!=null)
{
this.count++;
if(this.count==1)
{
bg=newEmgu.CV.VideoSurveillance.BGStatModel<Bgr>(img,
Emgu.CV.CvEnum.BG_STAT_TYPE.GAUSSIAN_BG_MODEL);
}
else
{
//更新高斯模型
bg.Update(img);
this.pictureBox1.Image=img.Bitmap;
this.pictureBox2.Image=bg.BackgroundMask.Bitmap;
this.pictureBox3.Image=bg.ForgroundMask.Bitmap;
Application.DoEvents();
System.Threading.Thread.Sleep(30);
}
}
}
C++版本:
代码intgaoshi(intargc,charargv)
{
IplImagepFrame=NULL;
IplImagepFrImg=NULL;
IplImagepBkImg=NULL;
CvCapturepCapture=NULL;
intnFrmNum=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)))
{
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;
}
//初始化高斯混合模型参数
CvGaussBGModelbg_model=NULL;
while(pFrame=cvQueryFrame( pCapture ))
{
nFrmNum++;
if(nFrmNum<3)
continue;
if(nFrmNum==3)
{
pBkImg=cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,3);
pFrImg=cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
//高斯背景建模,pFrame可以是多通道图像也可以是单通道图像
//cvCreateGaussianBGModel函数返回值为CvBGStatModel,
//需要强制转换成CvGaussBGModel
bg_model=(CvGaussBGModel)cvCreateGaussianBGModel(pFrame,0);
}
else
{
//更新高斯模型
cvUpdateBGStatModel(pFrame, (CvBGStatModel)bg_model );
//pFrImg为前景图像,只能为单通道
//pBkImg为背景图像,可以为单通道或与pFrame通道数相同
cvCopy(bg_model->foreground,pFrImg,0);
cvCopy(bg_model->background,pBkImg,0);
//把图像正过来
pBkImg->origin=1;
pFrImg->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);
}
原文链接: https://www.cnblogs.com/81/archive/2010/12/13/1904566.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/18716
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!