@@ -17,178 +17,98 @@ along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>.
#include < iostream>
#include < opencv2/opencv.hpp>
-
-#include " package_bgs/FrameDifferenceBGS.h"
-#include " package_bgs/StaticFrameDifferenceBGS.h"
-#include " package_bgs/WeightedMovingMeanBGS.h"
-#include " package_bgs/WeightedMovingVarianceBGS.h"
-#include " package_bgs/MixtureOfGaussianV1BGS.h"
-#include " package_bgs/MixtureOfGaussianV2BGS.h"
-#include " package_bgs/AdaptiveBackgroundLearning.h"
-#include " package_bgs/AdaptiveSelectiveBackgroundLearning.h"
-
-#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
-#include " package_bgs/GMG.h"
-#endif
-
-#include " package_bgs/dp/DPAdaptiveMedianBGS.h"
-#include " package_bgs/dp/DPGrimsonGMMBGS.h"
-#include " package_bgs/dp/DPZivkovicAGMMBGS.h"
-#include " package_bgs/dp/DPMeanBGS.h"
-#include " package_bgs/dp/DPWrenGABGS.h"
-#include " package_bgs/dp/DPPratiMediodBGS.h"
-#include " package_bgs/dp/DPEigenbackgroundBGS.h"
-#include " package_bgs/dp/DPTextureBGS.h"
-
-#include " package_bgs/tb/T2FGMM_UM.h"
-#include " package_bgs/tb/T2FGMM_UV.h"
-#include " package_bgs/tb/T2FMRF_UM.h"
-#include " package_bgs/tb/T2FMRF_UV.h"
-#include " package_bgs/tb/FuzzySugenoIntegral.h"
-#include " package_bgs/tb/FuzzyChoquetIntegral.h"
-
-#include " package_bgs/lb/LBSimpleGaussian.h"
-#include " package_bgs/lb/LBFuzzyGaussian.h"
-#include " package_bgs/lb/LBMixtureOfGaussians.h"
-#include " package_bgs/lb/LBAdaptiveSOM.h"
-#include " package_bgs/lb/LBFuzzyAdaptiveSOM.h"
-
-#include " package_bgs/ck/LbpMrf.h"
-#include " package_bgs/jmo/MultiLayerBGS.h"
-// The PBAS algorithm was removed from BGSLibrary because it is
-// based on patented algorithm ViBE
-// http://www2.ulg.ac.be/telecom/research/vibe/
-// #include "package_bgs/pt/PixelBasedAdaptiveSegmenter.h"
-#include " package_bgs/av/VuMeter.h"
-#include " package_bgs/ae/KDE.h"
-#include " package_bgs/db/IndependentMultimodalBGS.h"
-#include " package_bgs/sjn/SJN_MultiCueBGS.h"
-#include " package_bgs/bl/SigmaDeltaBGS.h"
-
-#include " package_bgs/pl/SuBSENSE.h"
-#include " package_bgs/pl/LOBSTER.h"
+#include " package_bgs/bgslibrary.h"
int main (int argc, char **argv)
{
std::cout << " Using OpenCV " << CV_MAJOR_VERSION << " ." << CV_MINOR_VERSION << " ." << CV_SUBMINOR_VERSION << std::endl;
- CvCapture *capture = 0 ;
- int resize_factor = 100 ;
+ VideoCapture capture;
- if (argc > 1 )
+ if (argc > 1 )
{
std::cout << " Openning: " << argv[1 ] << std::endl;
- capture = cvCaptureFromAVI (argv[1 ]);
+ capture. open (argv[1 ]);
}
else
- {
- capture = cvCaptureFromCAM (0 );
- resize_factor = 50 ; // set size = 50% of original image
- }
+ capture.open (0 );
- if (!capture)
+ if (!capture. isOpened () )
{
std::cerr << " Cannot initialize video!" << std::endl;
return -1 ;
}
-
- IplImage *frame_aux = cvQueryFrame (capture);
- IplImage *frame = cvCreateImage (cvSize ((int )((frame_aux->width*resize_factor)/100 ) , (int )((frame_aux->height*resize_factor)/100 )), frame_aux->depth, frame_aux->nChannels);
- cvResize (frame_aux, frame);
/* Background Subtraction Methods */
IBGS *bgs;
- /* ** Default Package ***/
- bgs = new FrameDifferenceBGS;
- // bgs = new StaticFrameDifferenceBGS;
- // bgs = new WeightedMovingMeanBGS;
- // bgs = new WeightedMovingVarianceBGS;
- // bgs = new MixtureOfGaussianV1BGS;
- // bgs = new MixtureOfGaussianV2BGS;
+ 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;
-
- /* ** DP Package (thanks to Donovan Parks) ***/
- // bgs = new DPAdaptiveMedianBGS;
- // bgs = new DPGrimsonGMMBGS;
- // bgs = new DPZivkovicAGMMBGS;
- // bgs = new DPMeanBGS;
- // bgs = new DPWrenGABGS;
- // bgs = new DPPratiMediodBGS;
- // bgs = new DPEigenbackgroundBGS;
- // bgs = new DPTextureBGS;
-
- /* ** TB Package (thanks to Thierry Bouwmans, Fida EL BAF and Zhenjie Zhao) ***/
+ // 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;
-
- /* ** JMO Package (thanks to Jean-Marc Odobez) ***/
- // bgs = new MultiLayerBGS;
-
- /* ** PT Package (thanks to Martin Hofmann, Philipp Tiefenbacher and Gerhard Rigoll) ***/
+ // bgs = new MultiLayer;
// bgs = new PixelBasedAdaptiveSegmenter;
-
- /* ** LB Package (thanks to Laurence Bender) ***/
// bgs = new LBSimpleGaussian;
// bgs = new LBFuzzyGaussian;
// bgs = new LBMixtureOfGaussians;
// bgs = new LBAdaptiveSOM;
// bgs = new LBFuzzyAdaptiveSOM;
-
- /* ** LBP-MRF Package (thanks to Csaba Kertész) ***/
- // bgs = new LbpMrf;
-
- /* ** AV Package (thanks to Lionel Robinault and Antoine Vacavant) ***/
+ // bgs = new LBP_MRF;
// bgs = new VuMeter;
-
- /* ** EG Package (thanks to Ahmed Elgammal) ***/
// bgs = new KDE;
-
- /* ** DB Package (thanks to Domenico Daniele Bloisi) ***/
- // bgs = new IndependentMultimodalBGS;
-
- /* ** SJN Package (thanks to SeungJong Noh) ***/
- // bgs = new SJN_MultiCueBGS;
-
- /* ** BL Package (thanks to Benjamin Laugraud) ***/
- // bgs = new SigmaDeltaBGS;
-
- /* ** PL Package (thanks to Pierre-Luc) ***/
- // bgs = new SuBSENSEBGS();
- // bgs = new LOBSTERBGS();
+ // bgs = new IndependentMultimodal;
+ // bgs = new MultiCue;
+ // bgs = new SigmaDelta;
+ // bgs = new SuBSENSE;
+ // bgs = new LOBSTER;
+ // bgs = new PAWCS;
+ // bgs = new TwoPoints;
+ // bgs = new ViBe;
int key = 0 ;
- while (key != ' q' )
+ cv::Mat img_input;
+ while (key != ' q' )
{
- frame_aux = cvQueryFrame (capture) ;
- if (!frame_aux ) break ;
+ capture >> img_input ;
+ if (img_input. empty () ) break ;
- cvResize (frame_aux, frame);
-
- cv::Mat img_input (frame);
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
-
+
// if(!img_mask.empty())
// cv::imshow("Foreground", img_mask);
// do something
-
+
key = cvWaitKey (33 );
}
delete bgs;
+ capture.release ();
cvDestroyAllWindows ();
- cvReleaseCapture (&capture);
return 0 ;
}
ShaninAndrey repliedJul 13, 2017
In file vibe-background-sequential.cpp on line 595 comments aren't match with code.
ShaninAndrey repliedJul 13, 2017
When SDEstimationFlag is False, in NPBGSubtractor.cpp in KDE algorithm DynamicMedianHistogram can't delete anything, because it doesn't init (NPBGSubtractor::~NPBGSubtractor())
ShaninAndrey repliedJul 13, 2017
In KDE algorithm when
if (frameNumber == framesToLearn) (line 78 in KDE.cpp)
"SequenceLength", "framesToLearn" - parameters, which algorithm is read (line KDE.cpp, KDE::loadConfig())
NPBGSubtractor analise all "SequenceLength" frames, but now we have only "framesToLearn" frames. (line 179 NPBGSubtractor.cpp, BuildAbsDiffHist())
Other ("SequenceLength" - "framesToLearn") frames could be randomly.