#include<stdio.h>#include<iostream>#include<list>#include<opencv2/core.hpp>#include<opencv2/imgcodecs.hpp>#include<opencv2/highgui.hpp>#include<opencv2/imgproc.hpp>usingnamespace cv;usingnamespace std;intmain(int argc,char* argv[]){
string url ="test.avi";
VideoCapture cap;if(!cap.open(url)){printf("the file open failed!\n");return-1;}//均值滤波的方法构建的背景模型是什么样子的。
Mat frame;
cap >> frame;printf("%d", frame.type());
Mat AverageImage= Mat::zeros(frame.size(), CV_64FC3);
Mat temp_frame;//过度掉开头效果更明显。for(int i =0; i <200; i++){
cap >> frame;}for(int i =0; i <200; i++){
cap >> frame;accumulate(frame, AverageImage);}
AverageImage /=200;
AverageImage.convertTo(AverageImage, CV_8UC3);namedWindow("BG", WINDOW_NORMAL);imshow("BG", AverageImage);imwrite("BG_100F.jpg", AverageImage);waitKey(0);}
混合高斯背景建模源码
#include"opencv2/opencv.hpp"#include"opencv2/video/background_segm.hpp"usingnamespace cv;usingnamespace std;intmain(){
VideoCapture video("test.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);for(int i =0; i <200; i++){
video >> frame;}for(int i =0; i <1000; i++){if(totalFrameNumber == frameNum)break;
video >> frame;++frameNum;//bgSubtractor(frame, mask, 0.001);
bgsubtractor->apply(frame, mask,0.01);namedWindow("BG", WINDOW_NORMAL);imshow("BG", mask);if(frameNum %100==0){
Mat BG;
bgsubtractor->getBackgroundImage(BG);imwrite(to_string(frameNum)+"BGmixed_Guess.jpg", BG);}waitKey(1);}waitKey(0);return0;}