OpenCV Вычитание фона путем усреднения кадров

Как мне реализовать вычитание фона (фоновая модель, полученная путем усреднения сначала.. скажем, 50 кадров..) в opencv Я попытался найти некоторые коды, но обнаружил, что они были в python..im, работающем на C++(Visual Studio 2013) Небольшой рабочий код сниппет поможет.. спасибо!

1 ответ

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

Параметры history это номера кадра, используемые для построения фоновой модели.

#include <opencv2\opencv.hpp>
using namespace cv;

int main(int argc, char *argv[])
{
    int history = 50;
    float varThreshold = 16.f; // default value
    BackgroundSubtractorMOG2 bg = BackgroundSubtractorMOG2(history, varThreshold);
    VideoCapture cap(0);
    Mat3b frame;
    Mat1b fmask;

    for (;;)
    {
        cap >> frame;
        bg(frame, fmask, -1);

        imshow("frame", frame);
        imshow("mask", fmask);
        if (cv::waitKey(30) >= 0) break;               
    }
    return 0;
}
Другие вопросы по тегам