⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 高斯建模.c

📁 基于opencv写的高斯背景建模的程序。对于车辆检测比较有用
💻 C
字号:
高斯背景建模


#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 %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 == 1)         
     {             
       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);      
    return 0;
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -