From ac60e30b77dded9b875afe8ed3949a0229044599 Mon Sep 17 00:00:00 2001
From: David MAUGIS <dmaugis@hotmail.com>
Date: Sun, 24 Jun 2018 21:53:28 +0200
Subject: [PATCH] added includes so that it compiles/link/runs under OpenCV 4.0
 (#126)

* added includes so that it compiles/link/runs under OpenCV 4.0

* changed to factory
---
 Demo.cpp                                  |  8 ++++++--
 PreProcessor.h                            |  7 +++++++
 VideoAnalysis.cpp                         |  4 ++--
 package_analysis/ForegroundMaskAnalysis.h |  8 +++++++-
 package_analysis/PixelUtils.h             |  3 +++
 package_bgs/IBGS.h                        | 21 ++++++++++++++++++---
 package_bgs/IMBS/IMBS.hpp                 |  3 +++
 package_bgs/KNN.cpp                       |  2 +-
 package_bgs/KNN.h                         |  2 +-
 package_bgs/LBP_MRF/MEHistogram.cpp       |  4 +++-
 package_bgs/LBP_MRF/MEImage.cpp           |  2 ++
 package_bgs/LBP_MRF/MotionDetection.cpp   |  2 ++
 package_bgs/LOBSTER.h                     |  1 -
 package_bgs/MultiLayer/CMultiLayerBGS.h   |  2 +-
 package_bgs/VuMeter/TBackground.cpp       |  1 +
 package_bgs/VuMeter/TBackground.h         |  2 ++
 package_bgs/dp/Image.h                    |  3 +--
 package_bgs/lb/Types.h                    |  1 +
 18 files changed, 61 insertions(+), 15 deletions(-)

diff --git a/Demo.cpp b/Demo.cpp
index f1022a5..b23bbb1 100644
--- a/Demo.cpp
+++ b/Demo.cpp
@@ -16,8 +16,11 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include <iostream>
 #include <opencv2/opencv.hpp>
+using namespace cv;
 
-#include "package_bgs/bgslibrary.h"
+//#include "package_bgs/bgslibrary.h"
+#include "package_bgs/IBGS.h"
+using namespace ibgs;
 
 int main(int argc, char **argv)
 {
@@ -42,7 +45,8 @@ int main(int argc, char **argv)
   /* Background Subtraction Methods */
   IBGS *bgs;
 
-  bgs = new FrameDifference;
+  //bgs = new FrameDifference;
+  bgs=IBGS::create(std::string("FrameDifference"));
   //bgs = new StaticFrameDifference;
   //bgs = new WeightedMovingMean;
   //bgs = new WeightedMovingVariance;
diff --git a/PreProcessor.h b/PreProcessor.h
index 2e6e61c..176dbca 100644
--- a/PreProcessor.h
+++ b/PreProcessor.h
@@ -18,6 +18,13 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <iostream>
 #include <opencv2/opencv.hpp>
+#include <opencv2/core/core.hpp>
+#include <opencv2/highgui/highgui.hpp>
+#include <opencv2/imgproc/imgproc.hpp>
+#include <opencv2/features2d/features2d.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
 
 namespace bgslibrary
 {
diff --git a/VideoAnalysis.cpp b/VideoAnalysis.cpp
index 9c8020a..03e47b3 100644
--- a/VideoAnalysis.cpp
+++ b/VideoAnalysis.cpp
@@ -45,7 +45,7 @@ namespace bgslibrary
       "{st|stopAt|0|Frame number to stop}"
       "{im|imgref||Specify image file}"
       ;
-#elif CV_MAJOR_VERSION == 3
+#elif CV_MAJOR_VERSION >= 3
     const std::string keys =
       "{h help ?     |     | Print this message   }"
       "{uf use_file  |false| Use a video file     }"
@@ -68,7 +68,7 @@ namespace bgslibrary
       cmd.printParams();
       return false;
     }
-#elif CV_MAJOR_VERSION == 3
+#elif CV_MAJOR_VERSION >= 3
     if (argc <= 1 || cmd.has("help"))
     {
       std::cout << "Usage: " << argv[0] << " [options]" << std::endl;
diff --git a/package_analysis/ForegroundMaskAnalysis.h b/package_analysis/ForegroundMaskAnalysis.h
index a0797d7..0a64ab2 100644
--- a/package_analysis/ForegroundMaskAnalysis.h
+++ b/package_analysis/ForegroundMaskAnalysis.h
@@ -19,7 +19,13 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #include <iostream>
 #include <string>
 #include <opencv2/opencv.hpp>
-
+#include <opencv2/core/core.hpp>
+#include <opencv2/highgui/highgui.hpp>
+#include <opencv2/imgproc/imgproc.hpp>
+#include <opencv2/features2d/features2d.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
 
 namespace bgslibrary
 {
diff --git a/package_analysis/PixelUtils.h b/package_analysis/PixelUtils.h
index 0e35c40..0ae6f73 100644
--- a/package_analysis/PixelUtils.h
+++ b/package_analysis/PixelUtils.h
@@ -18,6 +18,9 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdio.h>
 #include <opencv2/opencv.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
 
 class PixelUtils
 {
diff --git a/package_bgs/IBGS.h b/package_bgs/IBGS.h
index 718bf51..bfedeff 100644
--- a/package_bgs/IBGS.h
+++ b/package_bgs/IBGS.h
@@ -18,7 +18,16 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <iostream>
 #include <fstream>
+#include <list>
 #include <opencv2/opencv.hpp>
+#include <cv.h>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
+
+#define  CV_RGB(r, g, b)   cv::Scalar((b), (g), (r), 0)
+
+
 
 namespace bgslibrary
 {
@@ -35,7 +44,7 @@ namespace bgslibrary
 				cv::Mat _img_foreground;
 				cv::Mat _img_background;
 				process(img_input, _img_foreground, _img_background);
-        _img_background.copyTo(img_background);
+                _img_background.copyTo(img_background);
 				return _img_foreground;
 			}
 			cv::Mat getBackgroundModel() {
@@ -43,7 +52,9 @@ namespace bgslibrary
 			}
 			virtual void process(const cv::Mat &img_input, cv::Mat &img_foreground, cv::Mat &img_background) = 0;
 			virtual ~IBGS() {}
-
+            // create by name
+            static  IBGS*                    create(const std::string alg_name);
+            static  std::list<std::string>   get_algs_name();
 		protected:
 			bool firstTime = true;
 			bool showOutput = true;
@@ -65,10 +76,14 @@ namespace bgslibrary
 				img_outfg = cv::Mat::zeros(img_input.size(), CV_8UC1);
 				img_outbg = cv::Mat::zeros(img_input.size(), CV_8UC3);
 			}
-
+                
 		private:
 			virtual void saveConfig() = 0;
 			virtual void loadConfig() = 0;
 		};
 	}
 }
+
+namespace ibgs = bgslibrary::algorithms;
+
+
diff --git a/package_bgs/IMBS/IMBS.hpp b/package_bgs/IMBS/IMBS.hpp
index 7b9683b..e7043a0 100644
--- a/package_bgs/IMBS/IMBS.hpp
+++ b/package_bgs/IMBS/IMBS.hpp
@@ -41,6 +41,9 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #include <opencv2/highgui/highgui.hpp>
 #include <opencv2/imgproc/imgproc.hpp>
 #include <opencv2/features2d/features2d.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
 //C++
 #include <iostream>
 #include <vector>
diff --git a/package_bgs/KNN.cpp b/package_bgs/KNN.cpp
index d2e1412..e0877b5 100644
--- a/package_bgs/KNN.cpp
+++ b/package_bgs/KNN.cpp
@@ -16,7 +16,7 @@
  */
 #include "KNN.h"
 
-#if CV_MAJOR_VERSION == 3
+#if CV_MAJOR_VERSION >= 3
 
 using namespace bgslibrary::algorithms;
 
diff --git a/package_bgs/KNN.h b/package_bgs/KNN.h
index 87f20b2..9e79d93 100644
--- a/package_bgs/KNN.h
+++ b/package_bgs/KNN.h
@@ -17,7 +17,7 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #pragma once
 
 #include "opencv2/core/version.hpp"
-#if CV_MAJOR_VERSION == 3
+#if CV_MAJOR_VERSION >= 3
 
 #include <iostream>
 #include <opencv2/opencv.hpp>
diff --git a/package_bgs/LBP_MRF/MEHistogram.cpp b/package_bgs/LBP_MRF/MEHistogram.cpp
index 17c77fd..5b4e56f 100644
--- a/package_bgs/LBP_MRF/MEHistogram.cpp
+++ b/package_bgs/LBP_MRF/MEHistogram.cpp
@@ -44,7 +44,9 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #include "MEHistogram.hpp"
 
 #include <opencv2/opencv.hpp>
-
+#include <opencv2/core/core_c.h>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
 #include "MEDefs.hpp"
 #include "MEImage.hpp"
 
diff --git a/package_bgs/LBP_MRF/MEImage.cpp b/package_bgs/LBP_MRF/MEImage.cpp
index b01d494..a917bc8 100644
--- a/package_bgs/LBP_MRF/MEImage.cpp
+++ b/package_bgs/LBP_MRF/MEImage.cpp
@@ -38,6 +38,8 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #include "MEImage.hpp"
 
 #include <opencv2/opencv.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
 
 #include "MEDefs.hpp"
 
diff --git a/package_bgs/LBP_MRF/MotionDetection.cpp b/package_bgs/LBP_MRF/MotionDetection.cpp
index e591faa..bb61cf7 100644
--- a/package_bgs/LBP_MRF/MotionDetection.cpp
+++ b/package_bgs/LBP_MRF/MotionDetection.cpp
@@ -48,6 +48,8 @@ using namespace ck;
 #include <opencv/cvaux.h>
 #endif
 
+#include <opencv2/imgproc.hpp>
+
 #include "MEHistogram.hpp"
 #include "MEImage.hpp"
 
diff --git a/package_bgs/LOBSTER.h b/package_bgs/LOBSTER.h
index 41ba882..4b96ec9 100644
--- a/package_bgs/LOBSTER.h
+++ b/package_bgs/LOBSTER.h
@@ -40,7 +40,6 @@ namespace bgslibrary
       ~LOBSTER();
 
       void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
-
     private:
       void saveConfig();
       void loadConfig();
diff --git a/package_bgs/MultiLayer/CMultiLayerBGS.h b/package_bgs/MultiLayer/CMultiLayerBGS.h
index 78a0527..d9c2fb7 100644
--- a/package_bgs/MultiLayer/CMultiLayerBGS.h
+++ b/package_bgs/MultiLayer/CMultiLayerBGS.h
@@ -51,7 +51,7 @@ we don't use the bilateral filter to remove the noise in the foreground detectio
 step. If you compile it under Linux, please uncomment it.
 */
 //#define LINUX_BILATERAL_FILTER
-
+#include <opencv2/imgproc.hpp>
 #include "LocalBinaryPattern.h"
 #include "BGS.h"
 #include <stdio.h>
diff --git a/package_bgs/VuMeter/TBackground.cpp b/package_bgs/VuMeter/TBackground.cpp
index 4e93729..76d18c7 100644
--- a/package_bgs/VuMeter/TBackground.cpp
+++ b/package_bgs/VuMeter/TBackground.cpp
@@ -24,6 +24,7 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "TBackground.h"
 
+
 TBackground::TBackground(void)
 {
   std::cout << "TBackground()" << std::endl;
diff --git a/package_bgs/VuMeter/TBackground.h b/package_bgs/VuMeter/TBackground.h
index dbaaa6c..61925a2 100644
--- a/package_bgs/VuMeter/TBackground.h
+++ b/package_bgs/VuMeter/TBackground.h
@@ -25,6 +25,8 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <iostream>
 #include <opencv2/opencv.hpp>
+#include <opencv2/core/core_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
 
 class TBackground
 {
diff --git a/package_bgs/dp/Image.h b/package_bgs/dp/Image.h
index 6c0b5b3..fac11c8 100644
--- a/package_bgs/dp/Image.h
+++ b/package_bgs/dp/Image.h
@@ -29,8 +29,7 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #pragma once
 
 #include <opencv2/opencv.hpp>
-//#include <cxcore.h>
-
+#include <cv.h>
 // --- Image Iterator ---------------------------------------------------------
 
 template <class T>
diff --git a/package_bgs/lb/Types.h b/package_bgs/lb/Types.h
index bd59c41..fd9e65b 100644
--- a/package_bgs/lb/Types.h
+++ b/package_bgs/lb/Types.h
@@ -36,6 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #pragma once
 
 #include <opencv2/opencv.hpp>
+#include <opencv2/core/core_c.h>
 
 namespace lb_library
 {
-- 
GitLab