diff --git a/Demo.cpp b/Demo.cpp index f48654d679050c189ea901e6b186816227797d21..762d2ae741d6cfea22d9b441e42c4b8c792c0700 100644 --- a/Demo.cpp +++ b/Demo.cpp @@ -15,18 +15,16 @@ You should have received a copy of the GNU General Public License along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. */ #include <iostream> +#include <vector> #include <opencv2/opencv.hpp> -using namespace cv; #include "package_bgs/bgslibrary.h" -using namespace ibgs; - int main(int argc, char **argv) { std::cout << "Using OpenCV " << CV_MAJOR_VERSION << "." << CV_MINOR_VERSION << "." << CV_SUBMINOR_VERSION << std::endl; - VideoCapture capture; + cv::VideoCapture capture; if (argc > 1) { @@ -43,76 +41,57 @@ int main(int argc, char **argv) } /* Background Subtraction Methods */ - IBGS *bgs; - - bgs = new FrameDifference; - //bgs = new StaticFrameDifference; - //bgs = new WeightedMovingMean; - //bgs = new WeightedMovingVariance; - //bgs = new MixtureOfGaussianV1; // only on OpenCV 2.x - //bgs = new MixtureOfGaussianV2; - //bgs = new AdaptiveBackgroundLearning; - //bgs = new AdaptiveSelectiveBackgroundLearning; - //bgs = new GMG; // only on OpenCV 2.x - //bgs = new KNN; // only on OpenCV 3.x - //bgs = new DPAdaptiveMedian; - //bgs = new DPGrimsonGMM; - //bgs = new DPZivkovicAGMM; - //bgs = new DPMean; - //bgs = new DPWrenGA; - //bgs = new DPPratiMediod; - //bgs = new DPEigenbackground; - //bgs = new DPTexture; - //bgs = new T2FGMM_UM; - //bgs = new T2FGMM_UV; - //bgs = new T2FMRF_UM; - //bgs = new T2FMRF_UV; - //bgs = new FuzzySugenoIntegral; - //bgs = new FuzzyChoquetIntegral; - //bgs = new MultiLayer; - //bgs = new PixelBasedAdaptiveSegmenter; - //bgs = new LBSimpleGaussian; - //bgs = new LBFuzzyGaussian; - //bgs = new LBMixtureOfGaussians; - //bgs = new LBAdaptiveSOM; - //bgs = new LBFuzzyAdaptiveSOM; - //bgs = new LBP_MRF; - //bgs = new VuMeter; - //bgs = new KDE; - //bgs = new IndependentMultimodal; - //bgs = new MultiCue; - //bgs = new SigmaDelta; - //bgs = new SuBSENSE; - //bgs = new LOBSTER; - //bgs = new PAWCS; - //bgs = new TwoPoints; - //bgs = new ViBe; - //bgs = new CodeBook; - - int key = 0; - cv::Mat img_input; - while (key != 'q') - { - capture >> img_input; - if (img_input.empty()) break; - - cv::imshow("input", img_input); - - cv::Mat img_mask; - cv::Mat img_bkgmodel; - bgs->process(img_input, img_mask, img_bkgmodel); // by default, it shows automatically the foreground mask image + auto algorithmsName = BGS_Factory::Instance()->GetRegisteredAlgorithmsName(); - //if(!img_mask.empty()) - // cv::imshow("Foreground", img_mask); - // do something - - key = cvWaitKey(33); + auto key = 0; + for (const std::string& algorithmName : algorithmsName) + { + std::cout << "Running " << algorithmName << std::endl; + auto bgs = BGS_Factory::Instance()->Create(algorithmName); + + cv::Mat img_input; + + capture.set(CV_CAP_PROP_POS_FRAMES, 0); // Set index to 0 (start frame) + auto frame_counter = 0; + std::cout << "Press 's' to stop:" << std::endl; + while (key != 's') + { + // Capture frame-by-frame + capture >> img_input; + frame_counter += 1; + + if (img_input.empty()) break; + + cv::imshow("input", img_input); + + cv::Mat img_mask; + cv::Mat img_bkgmodel; + try + { + bgs->process(img_input, img_mask, img_bkgmodel); // by default, it shows automatically the foreground mask image + + //if(!img_mask.empty()) + // cv::imshow("Foreground", img_mask); + // do something + } + catch (std::exception& e) + { + std::cout << "Exception occurred" << std::endl; + std::cout << e.what() << std::endl; + } + + key = cv::waitKey(33); + } + + std::cout << "Press 'q' to exit, or anything else to move to the next algorithm:" << std::endl; + key = cv::waitKey(0); + if (key == 'q') + break; + + cv::destroyAllWindows(); } - delete bgs; - capture.release(); - cvDestroyAllWindows(); return 0; } diff --git a/Demo2.cpp b/Demo2.cpp index 75c906beedcd2be7de7a66377bb501234ee8d960..ad95e73b70497f495b762c47a89f68e838ed7f31 100644 --- a/Demo2.cpp +++ b/Demo2.cpp @@ -15,6 +15,7 @@ You should have received a copy of the GNU General Public License along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. */ #include <iostream> +#include <vector> #include <opencv2/opencv.hpp> #include "package_bgs/bgslibrary.h" @@ -24,84 +25,58 @@ int main(int argc, char **argv) std::cout << "Using OpenCV " << CV_MAJOR_VERSION << "." << CV_MINOR_VERSION << "." << CV_SUBMINOR_VERSION << std::endl; /* Background Subtraction Methods */ - IBGS *bgs; - - bgs = new FrameDifference; - //bgs = new StaticFrameDifference; - //bgs = new WeightedMovingMean; - //bgs = new WeightedMovingVariance; - //bgs = new MixtureOfGaussianV1; // only on OpenCV 2.x - //bgs = new MixtureOfGaussianV2; - //bgs = new AdaptiveBackgroundLearning; - //bgs = new AdaptiveSelectiveBackgroundLearning; - //bgs = new GMG; // only on OpenCV 2.x - //bgs = new KNN; // only on OpenCV 3.x - //bgs = new DPAdaptiveMedian; - //bgs = new DPGrimsonGMM; - //bgs = new DPZivkovicAGMM; - //bgs = new DPMean; - //bgs = new DPWrenGA; - //bgs = new DPPratiMediod; - //bgs = new DPEigenbackground; - //bgs = new DPTexture; - //bgs = new T2FGMM_UM; - //bgs = new T2FGMM_UV; - //bgs = new T2FMRF_UM; - //bgs = new T2FMRF_UV; - //bgs = new FuzzySugenoIntegral; - //bgs = new FuzzyChoquetIntegral; - //bgs = new MultiLayer; - //bgs = new PixelBasedAdaptiveSegmenter; - //bgs = new LBSimpleGaussian; - //bgs = new LBFuzzyGaussian; - //bgs = new LBMixtureOfGaussians; - //bgs = new LBAdaptiveSOM; - //bgs = new LBFuzzyAdaptiveSOM; - //bgs = new LBP_MRF; - //bgs = new VuMeter; - //bgs = new KDE; - //bgs = new IndependentMultimodal; - //bgs = new MultiCue; - //bgs = new SigmaDelta; - //bgs = new SuBSENSE; - //bgs = new LOBSTER; - //bgs = new PAWCS; - //bgs = new TwoPoints; - //bgs = new ViBe; - //bgs = new CodeBook; - - int frameNumber = 1; - int key = 0; - while (key != 'q') + auto algorithmsName = BGS_Factory::Instance()->GetRegisteredAlgorithmsName(); + + auto key = 0; + for (const std::string& algorithmName : algorithmsName) { - std::stringstream ss; - ss << frameNumber; - std::string fileName = "dataset/frames/" + ss.str() + ".png"; - std::cout << "reading " << fileName << std::endl; + std::cout << "Running " << algorithmName << std::endl; + auto bgs = BGS_Factory::Instance()->Create(algorithmName); - cv::Mat img_input = cv::imread(fileName, CV_LOAD_IMAGE_COLOR); + auto frame_counter = 0; + std::cout << "Press 's' to stop:" << std::endl; + while (key != 's') + { + // Capture frame-by-frame + frame_counter++; + std::stringstream ss; + ss << frame_counter; + std::string fileName = "dataset/frames/" + ss.str() + ".png"; + std::cout << "reading " << fileName << std::endl; - if (img_input.empty()) - break; + cv::Mat img_input = cv::imread(fileName, CV_LOAD_IMAGE_COLOR); + + if (img_input.empty()) + break; - cv::imshow("input", img_input); + cv::imshow("input", img_input); - cv::Mat img_mask; - cv::Mat img_bkgmodel; - bgs->process(img_input, img_mask, img_bkgmodel); - // by default, "bgs->process(.)" automatically shows the foreground mask image - // or set "bgs->setShowOutput(false)" to disable + cv::Mat img_mask; + cv::Mat img_bkgmodel; + try + { + bgs->process(img_input, img_mask, img_bkgmodel); // by default, it shows automatically the foreground mask image - //if(!img_mask.empty()) - // cv::imshow("Foreground", img_mask); - // do something + //if(!img_mask.empty()) + // cv::imshow("Foreground", img_mask); + // do something + } + catch (std::exception& e) + { + std::cout << "Exception occurred" << std::endl; + std::cout << e.what() << std::endl; + } + + key = cv::waitKey(33); + } + + std::cout << "Press 'q' to exit, or anything else to move to the next algorithm:" << std::endl; + key = cv::waitKey(0); + if (key == 'q') + break; - key = cvWaitKey(33); - frameNumber++; + cv::destroyAllWindows(); } - cvWaitKey(0); - delete bgs; - cvDestroyAllWindows(); return 0; } diff --git a/package_bgs/AdaptiveBackgroundLearning.h b/package_bgs/AdaptiveBackgroundLearning.h index 3cfc686296ecdda4f582cbf5e1795032273d23fc..d18114ba336c67902b5de8d590fde4df0de1447d 100644 --- a/package_bgs/AdaptiveBackgroundLearning.h +++ b/package_bgs/AdaptiveBackgroundLearning.h @@ -43,5 +43,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<AdaptiveBackgroundLearning> register_AdaptiveBackgroundLearning("AdaptiveBackgroundLearning"); } } diff --git a/package_bgs/AdaptiveSelectiveBackgroundLearning.h b/package_bgs/AdaptiveSelectiveBackgroundLearning.h index 24da44c7e025c848d5761f84eb9a95c6c96e23f5..5f9c98f16c60c04492a65afb2c880b32ed30a8bc 100644 --- a/package_bgs/AdaptiveSelectiveBackgroundLearning.h +++ b/package_bgs/AdaptiveSelectiveBackgroundLearning.h @@ -43,5 +43,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<AdaptiveSelectiveBackgroundLearning> register_AdaptiveSelectiveBackgroundLearning("AdaptiveSelectiveBackgroundLearning"); } } diff --git a/package_bgs/CodeBook.h b/package_bgs/CodeBook.h index ec224ab1eda74360f09d19c06046595c8da57117..316600d6f284179468a982cf9fa52de36e948fcd 100644 --- a/package_bgs/CodeBook.h +++ b/package_bgs/CodeBook.h @@ -64,5 +64,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<CodeBook> register_CodeBook("CodeBook"); } } diff --git a/package_bgs/DPAdaptiveMedian.h b/package_bgs/DPAdaptiveMedian.h index 7d2b7fa88bb173e2dc08413660c74a507bf7e0bd..990f04863382a2fbecbc1b9a61e47377c0ba8340 100644 --- a/package_bgs/DPAdaptiveMedian.h +++ b/package_bgs/DPAdaptiveMedian.h @@ -49,5 +49,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPAdaptiveMedian> register_DPAdaptiveMedian("DPAdaptiveMedian"); } } diff --git a/package_bgs/DPEigenbackground.h b/package_bgs/DPEigenbackground.h index f84fee765028a7d1c12e55e44dd1239843b5f159..d96255918da2360330788af7ad75e0a4ef87bdce 100644 --- a/package_bgs/DPEigenbackground.h +++ b/package_bgs/DPEigenbackground.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPEigenbackground> register_DPEigenbackground("DPEigenbackground"); } } diff --git a/package_bgs/DPGrimsonGMM.h b/package_bgs/DPGrimsonGMM.h index dcc05eb1b3b79c46f207898b0668508670eb6d3d..954261ff14f44bcf65489d72bac41317f689d391 100644 --- a/package_bgs/DPGrimsonGMM.h +++ b/package_bgs/DPGrimsonGMM.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPGrimsonGMM> register_DPGrimsonGMM("DPGrimsonGMM"); } } diff --git a/package_bgs/DPMean.h b/package_bgs/DPMean.h index 60299680675ba0c711055109e2ed59eebde018c5..ad63762e14035552d8db372d83004e25332b6534 100644 --- a/package_bgs/DPMean.h +++ b/package_bgs/DPMean.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPMean> register_DPMean("DPMean"); } } diff --git a/package_bgs/DPPratiMediod.h b/package_bgs/DPPratiMediod.h index d37a77abd018547f519dcd244b96e970a590bdc1..d71acccad9117d069fb93ec8793cd7d564a52511 100644 --- a/package_bgs/DPPratiMediod.h +++ b/package_bgs/DPPratiMediod.h @@ -52,5 +52,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPPratiMediod> register_DPPratiMediod("DPPratiMediod"); } } diff --git a/package_bgs/DPTexture.h b/package_bgs/DPTexture.h index 3cfdcea4c0bb499c323f4ef6b0cb0e218eaf3fdf..38321e4628aca716de3f77710b045741da748f95 100644 --- a/package_bgs/DPTexture.h +++ b/package_bgs/DPTexture.h @@ -55,5 +55,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPTexture> register_DPTextured("DPTexture"); } } diff --git a/package_bgs/DPWrenGA.h b/package_bgs/DPWrenGA.h index e4b0b5fffbb22de9dbc1edcbc8d24929576b69fc..d7086928b4464aa5080e7f4350aa94f982677961 100644 --- a/package_bgs/DPWrenGA.h +++ b/package_bgs/DPWrenGA.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPWrenGA> register_DPWrenGA("DPWrenGA"); } } diff --git a/package_bgs/DPZivkovicAGMM.h b/package_bgs/DPZivkovicAGMM.h index f35504bff012f395bfa86ad5b304442fcb2fc08b..25f4d4d53f299383e8f2574b2519e67b6050404a 100644 --- a/package_bgs/DPZivkovicAGMM.h +++ b/package_bgs/DPZivkovicAGMM.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPZivkovicAGMM> register_DPZivkovicAGMM("DPZivkovicAGMM"); } } diff --git a/package_bgs/FrameDifference.h b/package_bgs/FrameDifference.h index 07bed8ed5e36fa42a53e81b95ea9624349f820a6..74c22dbfb4db09d40f426aeae0ad041f10e30478 100644 --- a/package_bgs/FrameDifference.h +++ b/package_bgs/FrameDifference.h @@ -38,6 +38,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<FrameDifference> register_FrameDifference("FrameDifference"); } } diff --git a/package_bgs/FuzzyChoquetIntegral.h b/package_bgs/FuzzyChoquetIntegral.h index 25681b0c49f4e86efbd35440410b06ba90c25e81..000e031b9df96dd60580a6b7789c0cddf4fc0e6a 100644 --- a/package_bgs/FuzzyChoquetIntegral.h +++ b/package_bgs/FuzzyChoquetIntegral.h @@ -49,5 +49,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<FuzzyChoquetIntegral> register_FuzzyChoquetIntegral("FuzzyChoquetIntegral"); } } diff --git a/package_bgs/FuzzySugenoIntegral.h b/package_bgs/FuzzySugenoIntegral.h index 70bde1591ea4338b1955edf81e72d4089e1d7342..1cd913f4b4112433be34495cf0f5cfb3356d9595 100644 --- a/package_bgs/FuzzySugenoIntegral.h +++ b/package_bgs/FuzzySugenoIntegral.h @@ -49,5 +49,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<FuzzySugenoIntegral> register_FuzzySugenoIntegral("FuzzySugenoIntegral"); } } diff --git a/package_bgs/GMG.h b/package_bgs/GMG.h index 0ff89c75a40cba67dfe3b0738b061dcf4f2adf92..40473a59223c02bb5fe15c43e2a8a3fa18d58583 100644 --- a/package_bgs/GMG.h +++ b/package_bgs/GMG.h @@ -43,6 +43,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<GMG> register_GMG("GMG"); } } diff --git a/package_bgs/IBGS.h b/package_bgs/IBGS.h index 37a079bca371ddf492df133d793e16ddf9608661..eb9858d5d83b425efaa72ab3523e6b5ecd0740ba 100644 --- a/package_bgs/IBGS.h +++ b/package_bgs/IBGS.h @@ -19,6 +19,11 @@ along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. #include <iostream> #include <fstream> #include <list> +#include <memory> +#include <string> +#include <functional> +#include <map> + #include <opencv2/opencv.hpp> #include <opencv2/imgproc/types_c.h> #include <opencv2/imgproc/imgproc_c.h> @@ -79,7 +84,62 @@ namespace bgslibrary virtual void saveConfig() = 0; virtual void loadConfig() = 0; }; + + class BGS_Factory + { + public: + static BGS_Factory* BGS_Factory::Instance() + { + static BGS_Factory factory; + return &factory; + } + + std::shared_ptr<IBGS> BGS_Factory::Create(std::string name) + { + IBGS* instance = nullptr; + + // find name in the registry and call factory method. + auto it = factoryFunctionRegistry.find(name); + if (it != factoryFunctionRegistry.end()) + instance = it->second(); + + // wrap instance in a shared ptr and return + if (instance != nullptr) + return std::shared_ptr<IBGS>(instance); + else + return nullptr; + } + + std::vector<std::string> BGS_Factory::GetRegisteredAlgorithmsName() + { + std::vector<std::string> algorithmsName; + for (auto it = factoryFunctionRegistry.begin(); it != factoryFunctionRegistry.end(); ++it) { + algorithmsName.push_back(it->first); + } + return algorithmsName; + } + + void BGS_Factory::RegisterFactoryFunction(std::string name, + std::function<IBGS*(void)> classFactoryFunction) + { + // register the class factory function + factoryFunctionRegistry[name] = classFactoryFunction; + } + + private: + std::map<std::string, std::function<IBGS*(void)>> factoryFunctionRegistry; + }; + + template<class T> + class BGS_Register + { + public: + BGS_Register(std::string className) + { + // register the class factory function + BGS_Factory::Instance()->RegisterFactoryFunction(className, + [](void) -> IBGS* { return new T(); }); + } + }; } } - -namespace ibgs = bgslibrary::algorithms; diff --git a/package_bgs/IndependentMultimodal.h b/package_bgs/IndependentMultimodal.h index 4e2e3a38e4e71bf65e729e91f3c27717e07e48eb..04eb774471ead5fbcdbc630892ef60c656b43364 100644 --- a/package_bgs/IndependentMultimodal.h +++ b/package_bgs/IndependentMultimodal.h @@ -39,5 +39,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<IndependentMultimodal> register_IndependentMultimodal("IndependentMultimodal"); } } diff --git a/package_bgs/KDE.h b/package_bgs/KDE.h index e77996fd485456e1fce78df60697bf6254cacd3b..1589b697aa001c764d21bdcefb52e0a8d7043036 100644 --- a/package_bgs/KDE.h +++ b/package_bgs/KDE.h @@ -53,5 +53,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<KDE> register_KDE("KDE"); } } diff --git a/package_bgs/KNN.h b/package_bgs/KNN.h index 9e79d934224591afd85278dd7806fbd2f35d361c..c732901113e2e55b51f3c7793d1fe34a2c0fc223 100644 --- a/package_bgs/KNN.h +++ b/package_bgs/KNN.h @@ -51,6 +51,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<KNN> register_KNN("KNN"); } } diff --git a/package_bgs/LBAdaptiveSOM.h b/package_bgs/LBAdaptiveSOM.h index 7671ae1df9ff0540e2c74e3da8d53c5d58cceccd..25e782bca84659ea55ca8ffbe00fce460017bdf8 100644 --- a/package_bgs/LBAdaptiveSOM.h +++ b/package_bgs/LBAdaptiveSOM.h @@ -46,5 +46,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBAdaptiveSOM> register_LBAdaptiveSOM("LBAdaptiveSOM"); } } diff --git a/package_bgs/LBFuzzyAdaptiveSOM.h b/package_bgs/LBFuzzyAdaptiveSOM.h index 6a4a85c0007951b3a82b6f11941e669d16430332..4a59e4cffdc0d4d42dd917839a09cc4c72964234 100644 --- a/package_bgs/LBFuzzyAdaptiveSOM.h +++ b/package_bgs/LBFuzzyAdaptiveSOM.h @@ -46,5 +46,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBFuzzyAdaptiveSOM> register_LBFuzzyAdaptiveSOM("LBFuzzyAdaptiveSOM"); } } diff --git a/package_bgs/LBFuzzyGaussian.h b/package_bgs/LBFuzzyGaussian.h index 53c26679d55f1d7720b1eabbce8486f609e7c15d..3954fdb393c52f6f887efc2401ce22ca48433f21 100644 --- a/package_bgs/LBFuzzyGaussian.h +++ b/package_bgs/LBFuzzyGaussian.h @@ -45,5 +45,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBFuzzyGaussian> register_LBFuzzyGaussian("LBFuzzyGaussian"); } } diff --git a/package_bgs/LBMixtureOfGaussians.h b/package_bgs/LBMixtureOfGaussians.h index 8d4cb5619d42f85a74491cea340615f869b72d9a..6de35d8b26824cb29e34c24288e025ac188c8fea 100644 --- a/package_bgs/LBMixtureOfGaussians.h +++ b/package_bgs/LBMixtureOfGaussians.h @@ -45,6 +45,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBMixtureOfGaussians> register_LBMixtureOfGaussians("LBMixtureOfGaussians"); } } diff --git a/package_bgs/LBP_MRF.h b/package_bgs/LBP_MRF.h index a6e5c05b984d6ee3c8beb6cc97f94804a8de506d..0479ddd7f32d15b7116dee55cfc44bade3301fb8 100644 --- a/package_bgs/LBP_MRF.h +++ b/package_bgs/LBP_MRF.h @@ -39,5 +39,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBP_MRF> register_LBP_MRF("LBP_MRF"); } } diff --git a/package_bgs/LBSimpleGaussian.h b/package_bgs/LBSimpleGaussian.h index 5c829234f86933736682ca4d41e9fa4f12bf550c..4a9b2af27acafd989871447106656de7f0cdfba5 100644 --- a/package_bgs/LBSimpleGaussian.h +++ b/package_bgs/LBSimpleGaussian.h @@ -44,5 +44,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBSimpleGaussian> register_LBSimpleGaussian("LBSimpleGaussian"); } } diff --git a/package_bgs/LOBSTER.h b/package_bgs/LOBSTER.h index 4b96ec97ba59df72ada70abb2879ff6a3b8336fb..8f0de189365a01f360e9a1a0d9688e76f9abc5e8 100644 --- a/package_bgs/LOBSTER.h +++ b/package_bgs/LOBSTER.h @@ -44,5 +44,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LOBSTER> register_LOBSTER("LOBSTER"); } } diff --git a/package_bgs/MixtureOfGaussianV1.h b/package_bgs/MixtureOfGaussianV1.h index e18dbdbeae973b8d8e6c4b73504a5bea94050c5e..edf8b6db6f01c0aec6be591de67806e76375ed1e 100644 --- a/package_bgs/MixtureOfGaussianV1.h +++ b/package_bgs/MixtureOfGaussianV1.h @@ -47,6 +47,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<MixtureOfGaussianV1> register_MixtureOfGaussianV1("MixtureOfGaussianV1"); } } diff --git a/package_bgs/MixtureOfGaussianV2.h b/package_bgs/MixtureOfGaussianV2.h index ff4816dd0617fd5c0d095bda08a36df25443f769..c359f2017193e5e98335085dc3a1ae278ba016a2 100644 --- a/package_bgs/MixtureOfGaussianV2.h +++ b/package_bgs/MixtureOfGaussianV2.h @@ -48,5 +48,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<MixtureOfGaussianV2> register_MixtureOfGaussianV2("MixtureOfGaussianV2"); } } diff --git a/package_bgs/MultiCue.h b/package_bgs/MultiCue.h index 44524e0ab11c7b192cb4a26e0f5875f58749fa9a..47403a5b9bddf36c577ad09ea65b33425027c6cf 100644 --- a/package_bgs/MultiCue.h +++ b/package_bgs/MultiCue.h @@ -250,5 +250,7 @@ namespace bgslibrary short** g_aCReferredIndex; //To handle cache-book short** g_aCContinuousCnt; //To handle cache-book }; + + static BGS_Register<MultiCue> register_MultiCue("MultiCue"); } } diff --git a/package_bgs/MultiLayer.h b/package_bgs/MultiLayer.h index 78388816e39eb2f9ffd425ab619c419bf7e9f6a6..86da5926eb3e6980502661d20ad564b897540a76 100644 --- a/package_bgs/MultiLayer.h +++ b/package_bgs/MultiLayer.h @@ -95,5 +95,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<MultiLayer> register_MultiLayer("MultiLayer"); } } diff --git a/package_bgs/PAWCS.h b/package_bgs/PAWCS.h index 173bcf6917a2c6c253ca933538609be416feee63..bf378918820c98de2fcaf9a5b401face7da1d8f7 100644 --- a/package_bgs/PAWCS.h +++ b/package_bgs/PAWCS.h @@ -44,5 +44,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<PAWCS> register_PAWCS("PAWCS"); } } diff --git a/package_bgs/PixelBasedAdaptiveSegmenter.h b/package_bgs/PixelBasedAdaptiveSegmenter.h index 36dd0ad03a206ff7858dafe0279e3ed280a0f6d4..acafc90767e12db7407016fe8f41103afb6b06d5 100644 --- a/package_bgs/PixelBasedAdaptiveSegmenter.h +++ b/package_bgs/PixelBasedAdaptiveSegmenter.h @@ -54,5 +54,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<PixelBasedAdaptiveSegmenter> register_PixelBasedAdaptiveSegmenter("PixelBasedAdaptiveSegmenter"); } } diff --git a/package_bgs/SigmaDelta.h b/package_bgs/SigmaDelta.h index c7b1a2c660323a11672fb399a092b81139392d2a..5dd8a576e85f8426d554a6450f6d472b9875a057 100644 --- a/package_bgs/SigmaDelta.h +++ b/package_bgs/SigmaDelta.h @@ -45,5 +45,7 @@ namespace bgslibrary void loadConfig(); void applyParams(); }; + + static BGS_Register<SigmaDelta> register_SigmaDelta("SigmaDelta"); } } diff --git a/package_bgs/StaticFrameDifference.h b/package_bgs/StaticFrameDifference.h index 8c8474c6ed065178f1275e23baa826caaab5fb36..9fcb093819231b9bfd72a208cbff9c5ffcb901a3 100644 --- a/package_bgs/StaticFrameDifference.h +++ b/package_bgs/StaticFrameDifference.h @@ -38,5 +38,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<StaticFrameDifference> register_StaticFrameDifference("StaticFrameDifference"); } } diff --git a/package_bgs/SuBSENSE.h b/package_bgs/SuBSENSE.h index 9ac9aa6f2fcbe04592b1abf5682245885238d07a..ff172095fab01b2f7bbc72c097042992b3cc4187 100644 --- a/package_bgs/SuBSENSE.h +++ b/package_bgs/SuBSENSE.h @@ -45,5 +45,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<SuBSENSE> register_SuBSENSE("SuBSENSE"); } } diff --git a/package_bgs/T2FGMM_UM.h b/package_bgs/T2FGMM_UM.h index c58aeb756e40f43ba838901d5ff691df25338666..e8b4166ff59ee2d6e204378f9dd0b2cb48adae55 100644 --- a/package_bgs/T2FGMM_UM.h +++ b/package_bgs/T2FGMM_UM.h @@ -53,5 +53,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<T2FGMM_UM> register_T2FGMM_UM("T2FGMM_UM"); } } diff --git a/package_bgs/T2FGMM_UV.h b/package_bgs/T2FGMM_UV.h index 6102f3a21c99939d0b71316768378b01e7e983f9..a8dab79db96d08b0a682a2c50742cbeb0b003695 100644 --- a/package_bgs/T2FGMM_UV.h +++ b/package_bgs/T2FGMM_UV.h @@ -53,5 +53,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<T2FGMM_UV> register_T2FGMM_UV("T2FGMM_UV"); } } diff --git a/package_bgs/T2FMRF_UM.h b/package_bgs/T2FMRF_UM.h index 01f6014c44dfb33526f0c9e97646d52ccad8cb48..8d324f4edb77088407412288ecad52dca3b96f16 100644 --- a/package_bgs/T2FMRF_UM.h +++ b/package_bgs/T2FMRF_UM.h @@ -60,5 +60,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<T2FMRF_UM> register_T2FMRF_UM("T2FMRF_UM"); } } diff --git a/package_bgs/T2FMRF_UV.h b/package_bgs/T2FMRF_UV.h index 1c6917185365563acdc11d0aec41556ddd0ab429..8fd461144a12282f964d51fcf4ca50ea2699d9ed 100644 --- a/package_bgs/T2FMRF_UV.h +++ b/package_bgs/T2FMRF_UV.h @@ -60,5 +60,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<T2FMRF_UV> register_T2FMRF_UV("T2FMRF_UV"); } } diff --git a/package_bgs/TwoPoints.h b/package_bgs/TwoPoints.h index b42c2311a09c07d7ef3c4146f7c2cccc65769742..67176bc59894dca365c33d26ca97e2dd6b50c8d4 100644 --- a/package_bgs/TwoPoints.h +++ b/package_bgs/TwoPoints.h @@ -42,5 +42,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<TwoPoints> register_TwoPoints("TwoPoints"); } } diff --git a/package_bgs/ViBe.h b/package_bgs/ViBe.h index c8014cbc15b99175947ed1115f3bd8b4144249d4..dbe0e8ff5dffe318d9cb55ac71bf7f94c4c305c3 100644 --- a/package_bgs/ViBe.h +++ b/package_bgs/ViBe.h @@ -48,5 +48,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<ViBe> register_ViBe("ViBe"); } } diff --git a/package_bgs/VuMeter.h b/package_bgs/VuMeter.h index fefd3ec724e3d57455abc2657540c498468bc468..3912e320c80f624c792d2b270219bf10994fbfa0 100644 --- a/package_bgs/VuMeter.h +++ b/package_bgs/VuMeter.h @@ -48,5 +48,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<VuMeter> register_VuMeter("VuMeter"); } } diff --git a/package_bgs/WeightedMovingMean.h b/package_bgs/WeightedMovingMean.h index 4a1a3c5fddb5c68c5c4eb8025f2427b143ff6b3a..7f3eefdb44c54e8081e9b7170237bbb51774cdc4 100644 --- a/package_bgs/WeightedMovingMean.h +++ b/package_bgs/WeightedMovingMean.h @@ -41,5 +41,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<WeightedMovingMean> register_WeightedMovingMean("WeightedMovingMean"); } } diff --git a/package_bgs/WeightedMovingVariance.h b/package_bgs/WeightedMovingVariance.h index 79198b4a9e2fadd0c21f701e0b45e67a9b3dc488..791fd7735d816c111d24feafd6ea24ecf272f14d 100644 --- a/package_bgs/WeightedMovingVariance.h +++ b/package_bgs/WeightedMovingVariance.h @@ -42,5 +42,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<WeightedMovingVariance> register_WeightedMovingVariance("WeightedMovingVariance"); } } diff --git a/package_bgs/_template_/Amber.h b/package_bgs/_template_/Amber.h index 37f0f8deca5fc5c0d32ce8614bd0820be1f3dfd2..b66fa90972d21936c99b214f4dec04119e1f924a 100644 --- a/package_bgs/_template_/Amber.h +++ b/package_bgs/_template_/Amber.h @@ -41,5 +41,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<Amber> register_Amber("Amber"); } } diff --git a/package_bgs/_template_/MyBGS.h b/package_bgs/_template_/MyBGS.h index dea2a2fa3bbc2163a9afc822351f8c2f9bcbfb3e..e3ff7c5c7b011dbb43d7a5cb48143a7cce0cc442 100644 --- a/package_bgs/_template_/MyBGS.h +++ b/package_bgs/_template_/MyBGS.h @@ -39,5 +39,7 @@ namespace bgslibrary void saveConfig() {} void loadConfig() {} }; + + static BGS_Register<MyBGS> register_MyBGS("MyBGS"); } } diff --git a/package_bgs/bgslibrary.cpp b/package_bgs/bgslibrary.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0334f6c40b45faa333a281200c383c2b452bd508 --- /dev/null +++ b/package_bgs/bgslibrary.cpp @@ -0,0 +1,18 @@ +/* +This file is part of BGSLibrary. + +BGSLibrary is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +BGSLibrary is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "bgslibrary.h" diff --git a/package_bgs/bgslibrary.h b/package_bgs/bgslibrary.h index e95a06d25688d79b257ebb971034f1e82d406e07..be452367aaea003902290a321a8db7ce3f1c513c 100644 --- a/package_bgs/bgslibrary.h +++ b/package_bgs/bgslibrary.h @@ -16,6 +16,8 @@ along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. */ #pragma once +#include "IBGS.h" + #include "FrameDifference.h" #include "StaticFrameDifference.h" #include "WeightedMovingMean.h"