//cv::BackgroundSubtractorMOG2 bg = cv::BackgroundSubtractorMOG2();
cv::Ptr< BackgroundSubtractorMOG2 >createBackgroundSubtractorMOG2();
bg.set("history", 1000);
bg.set("nmixtures", 3);
bg.set("backgroundRatio", 0.7);
bg.set("detectShadows", false);
//background subtractor for the filterTotalBackground results
//cv::BackgroundSubtractorMOG2 bg2 = cv::BackgroundSubtractorMOG2();
Ptr< BackgroundSubtractorMOG2 >createBackgroundSubtractorMOG2 ();
bg2.set("history", 1000);
bg2.set("nmixtures", 3);
bg2.set("backgroundRatio", 0.7);
bg2.set("detectShadows", false);
I need to use this in a single code but I'm in confusion to where to declare bg and bg2 in the above shown code. The earlier commented lines are giving me errors. So if anyone could suggest a feasible solution, then it would be a great help.
bg->operator()(total, fore); //error is here
//Computes a background image.
//C++: void BackgroundSubtractor::getBackgroundImage(OutputArray backgroundImage) const¶
bg->getBackgroundImage(back);
//find the moving objects in the frame and cv::erode the image
bg2->operator()(frame, fore2); //error is here
bg2->getBackgroundImage(back2);
cv::erode(fore2, fore2, cv::Mat());
You must use the ->
operator to get the cv::BackgroundSubtractorMOG2
object.
cv::Ptr<cv::BackgroundSubtractorMOG2> bg = cv::createBackgroundSubtractorMOG2();
bg->setHistory(1000);
bg->setNMixtures(3);
bg->setBackgroundRatio(0.7);
bg->setDetectShadows(false);
Another error:
You must change:
bg->operator()(frame, fore);
to
bg->apply(frame, fore);
I see that you are using an old tutorial, you could use this tutorial