高斯建模

Emgu 版本:

 

复制代码
代码
 private void button1_Click(object sender, EventArgs e)
        {
            Emgu.CV.Capture cap 
= new Capture("d:\\1.wmv");
            Emgu.CV.VideoSurveillance.BGStatModel
<Bgr> bg = null; ;
            Capture c 
= new Capture("d:\\1.wmv");
            Image
<Bgr, byte> img = null;
            
while ((img = c.QueryFrame()) != null)
            {
                
this.count++;
                
if (this.count == 1)
                {
                    bg 
= new Emgu.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++版本:

 

复制代码
代码
int gaoshi(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"300); 
   cvMoveWindow(
"background"3600); 
   cvMoveWindow(
"foreground"6900);
   
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 %s\n", 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<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);   

}
复制代码


posted @   81  阅读(860)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
历史上的今天:
2009-12-13 【转】四阶魔方还原4
2009-12-13 【转】四阶魔方还原5
2009-12-13 【转】四阶魔方还原3
2009-12-13 【转】四阶魔方还原2
2009-12-13 【转】四阶魔方还原1
2009-12-13 【转】四阶魔方还原1
点击右上角即可分享
微信分享提示