From: Antonio Ospite Date: Thu, 22 Feb 2018 14:15:48 +0000 (+0100) Subject: Segmentation.hpp: adapt the code to OpenCV 3 X-Git-Url: https://git.ao2.it/experiments/opencv_trail_effect.git/commitdiff_plain/79d57b3dedad2f0ae675bacc63470a5af1a176e6?ds=sidebyside;hp=7555c94ede06439d70ea34dca41947c0caf2fa95 Segmentation.hpp: adapt the code to OpenCV 3 In OpenCV 3 the public cv::BackgroundSubtractorMOG2() is now abstract so we cannot inherit directly from it. The concrete class would be BackgroundSubtractorMOG2Imp from modules/video/src/bgfg_gaussmix2.cpp but it is private so we cannot inherit from it either. Use the factory method as documented to get a cv::BackgroundSubtractor instance of the desired type and use is as a property in the MOG2Segmentation class. --- diff --git a/Segmentation.hpp b/Segmentation.hpp index bd9b4c9..5e87326 100644 --- a/Segmentation.hpp +++ b/Segmentation.hpp @@ -63,17 +63,17 @@ public: * http://docs.opencv.org/master/d1/dc5/tutorial_background_subtraction.html */ -class MOG2Segmentation : public Segmentation, public cv::BackgroundSubtractorMOG2 { +class MOG2Segmentation : public Segmentation { public: - MOG2Segmentation(cv::VideoCapture& inputVideo, int learning_frames) : - cv::BackgroundSubtractorMOG2() + MOG2Segmentation(cv::VideoCapture& inputVideo, int learning_frames) { cv::Mat background; cv::Mat foreground_mask; + pMOG2 = cv::createBackgroundSubtractorMOG2(); for (int i = 0; i < learning_frames; i++) { inputVideo >> background; - this->operator()(background, foreground_mask); + pMOG2->apply(background, foreground_mask); } } @@ -81,7 +81,7 @@ public: { cv::Mat foreground_mask; - this->operator()(frame, foreground_mask, 0); + pMOG2->apply(frame, foreground_mask, 0); cv::erode(foreground_mask, foreground_mask, cv::Mat()); cv::dilate(foreground_mask, foreground_mask, cv::Mat()); cv::threshold(foreground_mask, foreground_mask, 0, 255, CV_THRESH_OTSU); @@ -89,6 +89,14 @@ public: return foreground_mask; } + + void getBackgroundImage(const cv::Mat& background) + { + pMOG2->getBackgroundImage(background); + } + +private: + cv::Ptr pMOG2; }; #endif // SEGMENTATION_HPP