cvGaussBGModel

int _tmain(int argc, _TCHAR* 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( !(pCapture = cvCaptureFromFile(""))     
   //   {   
   //      cerror("cannot open the file\n");   
   //      return -2;     
   //   }
   //打開攝像頭 
      if( !(pCapture = cvCaptureFromCAM(0)))     
      {   
         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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章