Я работаю над проектом обработки видео, в котором в качестве входного сигнала используется камера, и у меня статический фон. Мне не нужна какая-либо динамическая генерация фона, как у BackgroundSubtractorMOG в opencv. Я пытаюсь привязать объект переднего плана внутри ограничивающих рамок. Так что для этого я и сделал
cv::absdiff(back_frame,matProcessed,temp); //back_frame is the background matProcessed is the frame from CAMERA in grayscale
cv::threshold(temp,temp,20,255,THRESH_BINARY);
cv::findContours(temp,contours,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
std::vector<Rect> boundRect( contours.size() );
std::vector< std::vector<Point> > contours_poly( contours.size() );
int j=0;
for(int i = 0; i < contours.size(); i++ )
{
if(contourArea(contours[i])>100)
{
approxPolyDP( Mat(contours[i]), contours_poly[i], 10, true );
boundRect[j] = boundingRect( Mat(contours_poly[i]) );
j++;
}}
cv::rect r;
for (int i = 0; i < boundRect.size(); i++)
{
r = boundRect[i];
cv::rectangle(
frame,
cv::Point(r.x, r.y),
cv::Point(r.x + r.width, r.y + r.height),
CV_RGB(0,255,0)
);
}
Но проблема в том, что я не правильно выхожу на передний план. В любом случае я могу улучшить генерацию переднего плана и всегда связывать объект переднего плана, используя некоторые прямоугольные ограничивающие рамки, независимо от сложности фона и других факторов?
Существуют различные простые и сложные методы для этого. Переход с пиксельного вероятностного подхода определенно рекомендуется. Вы также можете использовать такие вещи, как модели Маркова по внешнему виду, чтобы уточнить свой результат. Ссылаться на Эта бумага, конкретно Связанных с работой раздел и последний бит, где они уточняют объекты переднего плана.
Других решений пока нет …