2015-10-08 4 views
3

Я пытаюсь вычесть этот кирпич. orange building brick .Как сделать openCV Backgroundsubtraction KNN алгоритм длятся дольше, отслеживая объект, который не движется

Для этого я использую алгоритм KNN, предоставляемый opencv 3.0. Для инициализации фоновой модели я использую 40 кадров без кирпича.

В целом, это работает очень хорошо. (кирпич с тенью) enter image description here

Единственная проблема заключается в том, что алгоритм начинает терять кирпич вокруг рамы 58

(Изображение показывает кадр 62)

enter image description here

После кадра 64 я получаю только черные изображения. Я знаю, что этого не произойдет, если кирпич будет двигаться, но, к сожалению, есть длинные последовательности, где это не так.

Кто-нибудь знает об этом?

PS: Я пытался играть вокруг с историей Paramer из

cv::createBackgroundSubtractorKNN(int history,double Threshold, bool detectShadows= true) 

Но нет никакой разницы между history = 500 or history = 500000

+0

возможно связанные: HTTP: //stackoverflow.com/questions/32440419/what-is-the-meaning-of-history-inside-backgroundsubtractormog2 – Miki

+0

Да, это связанный с этим вопрос, но, к сожалению, никто не ответил на его вопрос. Возможно, мне больше повезло с моим вопросом. В любом случае, большое спасибо. –

ответ

0

простой, но медленный раствор переинициализировать модель фона каждые пять кадров.

for (size_t i = 0; i < imageList.size(); i++){ 
    if (i % 5 == 0){ 
     for (auto& it : backgroundList){ 

      string nextFrameFilename(it.string()); 
      frame = cv::imread(nextFrameFilename); 
      pMOG->apply(frame, fgMaskMOG2); 
      imshow("Frame", frame); 
      imshow("FG Mask MOG 2", fgMaskMOG2); 
      keyboard = cv::waitKey(30); 
     } 
    } 
}