高斯混合模型背景建模(BackgroundSubtractorMOG2)在opencv3.0与opencv2.4中的使用方法区别

来源:互联网 发布:网络映射如何做 编辑:程序博客网 时间:2024/05/01 13:08


BackgroundSubtractorMOG2函数在opencv3.0与opencv2.4中的不同实现方式

在opencv2.4版本中,只要加了#include "opencv2/opencv.hpp"头文件,主要的调用代码如下

int main(){VideoCapture video("../video.avi");Mat frame, mask, thresholdImage, output;int frameNum = 1;if (!video.isOpened())cout << "fail to open!" << endl;//cout<<video.isOpened();long totalFrameNumber = video.get(CV_CAP_PROP_FRAME_COUNT);video>>frame;//cout<<frame.size;BackgroundSubtractorMOG bgSubtractor(20, 10, 0.5, false);//imshow("video", frame);//waitKey(10000);while (true){if (totalFrameNumber == frameNum)break;video >> frame;++frameNum;bgSubtractor(frame, mask, 0.001);//cout << frameNum << endl;imshow("mask",mask);  waitKey(10);  }return 0;}
但在opencv3.0中,使用方式不一样,而且3.0中还少了BackgroundSubtractorMOG函数,只有BackgroundSubtractorMOG2,我通过opencv官方文档segment_objects.cpp(http://http://docs.opencv.org/master/dd/d9d/segment_objects_8cpp-example.html#a22)弄明白了如何使用。

我的使用代码如下,vs2013+opencv3.0.0beta

#include "opencv2/opencv.hpp"#include "opencv2/video/background_segm.hpp"using namespace cv;using namespace std;int main(){VideoCapture video("../video.avi");int frameNum = 1;Mat frame, mask, thresholdImage, output;if (!video.isOpened())cout << "fail to open!" << endl;//cout<<video.isOpened();double totalFrameNumber = video.get(CAP_PROP_FRAME_COUNT);video >> frame;Ptr<BackgroundSubtractorMOG2> bgsubtractor = createBackgroundSubtractorMOG2();bgsubtractor->setVarThreshold(20);while (true){if (totalFrameNumber == frameNum)break;video >> frame;++frameNum;//bgSubtractor(frame, mask, 0.001);bgsubtractor->apply(frame, mask, 0.01);imshow("mask", mask);waitKey(10);}return 0;}


5 0
原创粉丝点击