opencv = 3.1.0的背景减法器

时间:2017-04-26 07:08:54

标签: c++ opencv opencv3.1 background-subtraction

//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);

需要在单个代码中使用它,但我很困惑在上面显示的代码中声明bg和bg2的位置。之前的注释行给了我错误。如果有人可以建议一个可行的解决方案,那么它将是一个很大的帮助

  

bg-&gt; operator()(total,fore); //错误就在这里

//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());

1 个答案:

答案 0 :(得分:3)

您必须使用->运算符来获取cv::BackgroundSubtractorMOG2对象。

cv::Ptr<cv::BackgroundSubtractorMOG2> bg = cv::createBackgroundSubtractorMOG2();
bg->setHistory(1000);
bg->setNMixtures(3);
bg->setBackgroundRatio(0.7);
bg->setDetectShadows(false);

另一个错误:

你必须改变:

bg->operator()(frame, fore);

bg->apply(frame, fore);

我发现您使用的是旧教程,您可以使用此tutorial