Ask Your Question


asked 2014-03-03 13:23:19 -0500

carlospalma03 gravatar image

updated 2014-03-03 13:23:46 -0500

Hello, I can´t seem to be able to use the BackgroundSubstractor class. I tried to follow the tutorial like this:

 Ptr<BackgroundSubstractor> bg;
 bg= createBackgroundSubstractor();

the compiler tells me that create BackgroundSubstractor() is not defined.

I have also tried this:

BackgroundSubstractor bg;
bg=new BackgroundSubstractor();

but I get the error

      undefined reference to cv::BackgroundSubstractorMOG::BackgroundSubstractorMOG()

Any help will be much appreciated

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted

answered 2014-03-03 14:29:21 -0500

Will Stewart gravatar image

updated 2014-03-14 13:09:45 -0500

Declare your instance as;

cv::BackgroundSubtractorMOG bg;


cv::BackgroundSubtractorMOG2 bg;

In your loop;

bg.operator ()(frame,fore);

BackgroundSubtractor itself is only used to define the common interface for the whole family of background/foreground segmentation algorithms.

See this example;

edit flag offensive delete link more



I was using this: bg->operator()(frame,fore); after defining bg using smartpointers, like in the tutorial, but I got a black box. With your syntax it works! thank you very much

carlospalma03 gravatar imagecarlospalma03 ( 2014-03-03 14:52:58 -0500 )edit

I updated the answer to point out that you can use BackgroundSubtractorMOG as well, which implements a different algorithm. Try both to see which one works best for you, noting that there are a number of parameters you can adjust.

Will Stewart gravatar imageWill Stewart ( 2014-03-14 13:07:43 -0500 )edit

Question Tools


Asked: 2014-03-03 13:23:19 -0500

Seen: 591 times

Last updated: Mar 14 '14