Skip to content

Instantly share code, notes, and snippets.

@MareArts
Last active October 13, 2017 22:41
Show Gist options
  • Save MareArts/8e197d208fed78e651428cad61e5d41f to your computer and use it in GitHub Desktop.
Save MareArts/8e197d208fed78e651428cad61e5d41f to your computer and use it in GitHub Desktop.
background subtraction example based on opencv 3.2, GMG, MOG, MOG2, KNN
http://study.marearts.com/2017/04/opencv-background-subtraction-32.html
#include "opencv2\opencv.hpp"
#include "opencv2\bgsegm.hpp" //for MOG, GMG
#include <iostream>
#include <time.h>
#ifdef _DEBUG
#pragma comment(lib, "opencv_core320d.lib")
#pragma comment(lib, "opencv_highgui320d.lib")
#pragma comment(lib, "opencv_imgproc320d.lib")
#pragma comment(lib, "opencv_videoio320d.lib")
#pragma comment(lib, "opencv_bgsegm320d.lib")
#pragma comment(lib, "opencv_video320d.lib")
#else
#pragma comment(lib, "opencv_core320.lib")
#pragma comment(lib, "opencv_highgui320.lib")
#pragma comment(lib, "opencv_imgproc320.lib")
#pragma comment(lib, "opencv_videoio320.lib")
#pragma comment(lib, "opencv_bgsegm320.lib")
#pragma comment(lib, "opencv_video320.lib")
#endif
using namespace std;
using namespace cv;
void main()
{
//global variables
Mat frame; //current frame
Mat resizeF;
Mat fgMaskMOG; //fg mask generated by MOG method
Mat fgMaskMOG2; //fg mask fg mask generated by MOG2 method
Mat fgMaskGMG; //fg mask fg mask generated by GMG method
Mat fgMaskKNN; //fg mask fg mask generated by KNN method
Ptr< BackgroundSubtractor> pMOG; //MOG Background subtractor
Ptr< BackgroundSubtractor> pMOG2; //MOG2 Background subtractor
Ptr< BackgroundSubtractor> pGMG; //GMG Background subtractor
Ptr< BackgroundSubtractor> pKNN; //KNN Background subtractor
//create
pMOG = cv::bgsegm::createBackgroundSubtractorMOG();
pMOG2 = createBackgroundSubtractorMOG2();
pGMG = cv::bgsegm::createBackgroundSubtractorGMG();
pKNN = createBackgroundSubtractorKNN();
char fileName[100] = "cctv2.mov";
VideoCapture stream1(fileName);
Mat element = getStructuringElement(MORPH_RECT, Size(3, 3), Point(1, 1));
//unconditional loop
while (true) {
Mat cameraFrame;
if (!(stream1.read(frame))) //get one frame form video
break;
resize(frame, resizeF, Size(frame.size().width / 4, frame.size().height / 4));
pMOG->apply(resizeF, fgMaskMOG);
pMOG2->apply(resizeF, fgMaskMOG2);
pGMG->apply(resizeF, fgMaskGMG);
pKNN->apply(resizeF, fgMaskKNN);
//morphologyEx(fgMaskGMG, fgMaskGMG, CV_MOP_OPEN, element);
imshow("Origin", resizeF);
imshow("MOG", fgMaskMOG);
imshow("MOG2", fgMaskMOG2);
imshow("GMG", fgMaskGMG);
imshow("KNN", fgMaskKNN);
if (waitKey(30) >= 0)
break;
}
}
@MareArts
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment