Last active
October 13, 2017 22:41
-
-
Save MareArts/8e197d208fed78e651428cad61e5d41f to your computer and use it in GitHub Desktop.
background subtraction example based on opencv 3.2, GMG, MOG, MOG2, KNN
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
http://study.marearts.com/2017/04/opencv-background-subtraction-32.html