Я пытаюсь вычесть этот строительный кирпич.
.
Для этого я использую алгоритм 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
Простое, но медленное решение — повторно инициализировать фоновую модель каждые пять кадров.
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);
}
}
}
Других решений пока нет …