Как я могу заставить openCV Backgroundsubtraction KNN работать дольше, отслеживая передний объект, который не движется

Я пытаюсь вычесть этот строительный кирпич. оранжевый строительный кирпич
.

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

В целом, это работает довольно хорошо.
(Кирпич с тенью)
введите описание изображения здесь

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

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

введите описание изображения здесь

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

Кто-нибудь знает решение этой проблемы?

PS: я пытался поиграться с историей Paramer of

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

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

4

Решение

Простое, но медленное решение — повторно инициализировать фоновую модель каждые пять кадров.

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);
}
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector