• Open Source Computer Vision Library

高斯背景建模

Wikipedia,自由的百科全书

代码:

  1. #include <stdio.h>
  2. #include <cv.h>
  3. #include <cxcore.h>
  4. #include <highgui.h>
  5. #include <cvaux.h>//必须引此头文件
  6. int main( int argc, char** argv )
  7. {
  8.  
  9. IplImage* pFrame = NULL;
  10. IplImage* pFrImg = NULL;
  11. IplImage* pBkImg = NULL;
  12. CvCapture* pCapture = NULL;
  13. int nFrmNum = 0;
  14.  
  15. cvNamedWindow("video", 1);
  16. cvNamedWindow("background",1);
  17. cvNamedWindow("foreground",1);
  18. cvMoveWindow("video", 30, 0);
  19. cvMoveWindow("background", 360, 0);
  20. cvMoveWindow("foreground", 690, 0);
  21. if( argc > 2 )
  22. {
  23. fprintf(stderr, "Usage: bkgrd [video_file_name]\n");
  24. return -1;
  25. }
  26.  
  27.  
  28. //打开视频文件
  29. if(argc == 2)
  30. if( !(pCapture = cvCaptureFromFile(argv[1])))
  31. {
  32. fprintf(stderr, "Can not open video file %s\n", argv[1]);
  33. return -2;
  34. }
  35. //打开摄像头
  36. if (argc == 1)
  37. if( !(pCapture = cvCaptureFromCAM(-1)))
  38. {
  39. fprintf(stderr, "Can not open camera.\n");
  40. return -2;
  41. }
  42.  
  43. //初始化高斯混合模型参数
  44. CvGaussBGModel* bg_model=NULL;
  45.  
  46. while(pFrame = cvQueryFrame( pCapture ))
  47. {
  48. nFrmNum++;
  49. if(nFrmNum == 1)
  50. {
  51. pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,3);
  52. pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
  53.  
  54.  
  55. //高斯背景建模,pFrame可以是多通道图像也可以是单通道图像
  56. //cvCreateGaussianBGModel函数返回值为CvBGStatModel*,
  57. //需要强制转换成CvGaussBGModel*
  58. bg_model = (CvGaussBGModel*)cvCreateGaussianBGModel(pFrame, 0);
  59. }
  60. else
  61. {
  62. //更新高斯模型
  63. cvUpdateBGStatModel(pFrame, (CvBGStatModel *)bg_model );
  64.  
  65. //pFrImg为前景图像,只能为单通道
  66. //pBkImg为背景图像,可以为单通道或与pFrame通道数相同
  67. cvCopy(bg_model->foreground,pFrImg,0);
  68. cvCopy(bg_model->background,pBkImg,0);
  69.  
  70. //把图像正过来
  71. pBkImg->origin=1;
  72. pFrImg->origin=1;
  73.  
  74. cvShowImage("video", pFrame);
  75. cvShowImage("background", pBkImg);
  76. cvShowImage("foreground", pFrImg);
  77. if( cvWaitKey(2) >= 0 )
  78. break;
  79. }
  80.  
  81. }
  82.  
  83. //释放高斯模型参数占用内存
  84. cvReleaseBGStatModel((CvBGStatModel**)&bg_model);
  85. cvDestroyWindow("video");
  86. cvDestroyWindow("background");
  87. cvDestroyWindow("foreground");
  88. cvReleaseImage(&pFrImg);
  89. cvReleaseImage(&pBkImg);
  90. cvReleaseCapture(&pCapture);
  91. return 0;
  92. }
  93.  
Views
Personal tools