обнаружение только медленно движущихся объектов с помощью opencv

Я использую OpenCV для обнаружения движения и для этого использую алгоритм вычитания заднего фона. Я получил следующий код из сети.

cv::Mat frame;
cv::Mat back;
cv::Mat fore;
cv::VideoCapture cap(0);
bg.nmixtures = 3;
bg.bShadowDetection = false;
const int history = 5;
cv::BackgroundSubtractorMOG2 bg (history,nmixtures,bShadowDetection);

std::vector<std::vector<cv::Point> > contours;

cv::namedWindow("Frame");
cv::namedWindow("Background");

for(;;)
{
cap >> frame;
bg.operator ()(frame,fore);
bg.getBackgroundImage(back);
cv::erode(fore,fore,cv::Mat());
cv::dilate(fore,fore,cv::Mat());
cv::findContours(fore,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
cv::drawContours(frame,contours,-1,cv::Scalar(0,0,255),2);
cv::imshow("Frame",frame);
cv::imshow("Background",back);
if(cv::waitKey(30) >= 0) break;
}

Так что я могу установить порог, чтобы, если изменение в новом и старом кадре больше, чем порог, то ничего не делать. Или может быть какой-то другой алгоритм, который должен соответствовать моей ситуации захвата только медленно движущегося объекта.

0

Решение

Вы можете изменить значение истории (увеличить его) в смеси гауссовой модели, если хотите обнаружить медленно движущиеся объекты.

0

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

Вы можете попытаться использовать скользящее среднее для кадров вместо того, чтобы использовать каждый кадр в качестве входных данных для вычитания BG. Или используйте скользящее среднее для вывода вычитания BG, а затем преобразуйте в двоичную форму с помощью порогового значения.

Увидеть addWeighted а также скользящее среднее (см. Накопительное скользящее среднее).

Интеграция уменьшит влияние быстрых изменений.

0

По вопросам рекламы [email protected]