当前位置:   article > 正文

opencv中的GMM(混合高斯分布)算法原理及C++实现(BackgroundSubtractorMOG)_opencv c++ createbackgroundsubtractormog

opencv c++ createbackgroundsubtractormog

1.opencv中的GMM算法

GMM(Gaussian Mixture Model)是一种经典的背景提取算法,opencv中也把它引入并封装为算法类。使用opencv2413版本时,通过BackgroundSubtractorMOG类即可调用。这里先给出一个调用例子和算法效果,代码如下所示。

  1. #include <iostream>
  2. #include <opencv2/core/core.hpp>
  3. #include <opencv2/imgproc/imgproc.hpp>
  4. #include <opencv2/highgui/highgui.hpp>
  5. #include <opencv2/video/background_segm.hpp>
  6. int main()
  7. {
  8. // Open the video file
  9. cv::VideoCapture capture("768X576.avi");
  10. // check if video successfully opened
  11. if (!capture.isOpened())
  12. return 0;
  13. // current video frame
  14. cv::Mat frame, frameGray;
  15. // foreground binary image
  16. cv::Mat foreground;
  17. cv::namedWindow("Extracted Foreground");
  18. // The Mixture of Gaussian object
  19. // used with all default parameters
  20. cv::BackgroundSubtractorMOG mog;
  21. bool stop(false);
  22. // for all frames in video
  23. while (!stop) {
  24. // read next frame if any
  25. if (!capture.read(frame))
  26. break;
  27. // update the background
  28. // and return the foreground
  29. cvtColor(frame, frameGray, CV_BGR2GRAY);
  30. mog(frameGray,foreground,0.01);
  31. // show foreground
  32. cv::imshow("Extracted Foreground",foreground);
  33. cv::imshow("image",frame);
  34. // introduce a delay
  35. // or press key to stop
  36. if (cv::waitKey(10)>=0)
  37. stop= true;
  38. }
  39. return 0;
  40. }
其中“768X576.avi”是opencv源码文件中的一个包含多个行人的视频文件,算法效果如下图所示,可以看到行人被很好的用白色标注出来。

2.算法原理

BackgroundSubtractorMOG的实现在2413版本的opencv_2.4.13\opencv\sources\modules\video\src\bgfg_gaussmix.cpp中,cpp中讲到算法原理参考《An Improved Adaptive Background Mixture Model for Real-time Tracki

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/920126
推荐阅读
相关标签
  

闽ICP备14008679号