2017-04-26 115 views
0
//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); 

必要利用这种单一的代码,但我很困惑的地方在上面显示前面code.the注释行给我的错误声明BG和BG2。因此,如果任何人都可以提出一个可行的解决方案,那么这将是一个很大的帮助背景减法器,用于OpenCV的= 3.1.0

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()); 
+0

你可以显示我得到的错误 – eyllanesc

回答

1

必须使用->运营商获得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

+0

谢谢它的工作。但你能帮我解决因为你说的改变而导致的错误吗?错误类似于 – sophie

+0

/humans/package_bgs/MovingDetection.cpp:610:22:错误:'struct cv :: Ptr '没有名为'operator()'的成员 bg2.operator()(frame ,前2); – sophie

+0

请[edit](http://stackoverflow.com/posts/43627268/edit)你的答案,并显示产生错误的代码。 – eyllanesc