вычитатель фона для opencv=3.1.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);

нужно использовать это в одном коде, но я не понимаю, где объявить bg и bg2 в приведенном выше коде. ранее прокомментированные строки дают мне ошибки. поэтому, если кто-нибудь может предложить возможное решение, то это будет большая помощь

bg->operator()(всего, вперед); // ошибка здесь

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

person sophie    schedule 26.04.2017    source источник


Ответы (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);

to

bg->apply(frame, fore);

Я вижу, что вы используете старый учебник, вы можете использовать этот учебник

person eyllanesc    schedule 26.04.2017
comment
спасибо, это сработало. но не могли бы вы помочь мне с ошибкой, вызванной изменениями, которые вы сказали. ошибка такая - person sophie; 26.04.2017
comment
/humans/package_bgs/MovingDetection.cpp:610:22: ошибка: «struct cv::Ptr‹cv::BackgroundSubtractorMOG2›» не имеет члена с именем «operator()» bg2.operator()(frame, fore2); - person sophie; 26.04.2017
comment
я должен прокомментировать свои строки ошибок, а затем добавить ваш отредактированный фрагмент? если я это сделаю, то весь фрагмент выдает ошибку. и если я не прокомментирую их, то он не даст члена с именем оператора - person sophie; 26.04.2017
comment
СПАСИБО ЗА ВАШЕ ВРЕМЯ И ПОМОЩЬ. ЭТО СРАБОТАЛО...:) - person sophie; 26.04.2017