Вычтите фон изображений при помощи OpenCV в MATLAB

В этом примере показано, как вычесть знания в последовательности изображений, или видео при помощи предварительно созданного интерфейса MATLAB к OpenCV функционируют cv::BackgroundSubtractorKNN. В этом примере вы также используете createMat служебная функция, чтобы задать массивы ввода и вывода и getImage служебная функция, чтобы считать выходное изображение, возвращенное функцией OpenCV. Входное видео должно быть, имеют статический фон и динамические основные объекты.

Считайте видео в рабочее пространство MATLAB при помощи VideoReader Функция MATLAB.

videoSample = VideoReader("atrium.mp4");
videoSample.CurrentTime = 2.5;

Добавьте интерфейс MATLAB в имена пакета OpenCV к списку импорта.

import clib.opencv.*;
import vision.opencv.*;

Задайте значения параметров, чтобы вычислить фон при помощи функции OpenCV для фонового вычитающего устройства k - ближайших соседей (KNN) cv::BackgroundSubtractorKNN. Установите эти значения:

  • Количество последних систем координат, которые рассмотрят для вычисления фоновой модели history KNN к 300.

  • Порог для дифференциации переднего плана и фоновых пикселей threshold к 400.

  • shadow к true, обнаружить теневые области.

history = 300;
threshold = 400;
shadow = true;

Создайте объект интерфейса MATLAB при помощи getBasePtr служебная функция, чтобы представлять BackgroundSubtractorKNN класс.

cvPtr = cv.createBackgroundSubtractorKNN(history,threshold,shadow);
kNNBase = util.getBasePtr(cvPtr);

Можно также установить значения параметров для фонового вычитающего устройства путем доступа к открытым методам BackgroundSubtractorKNN класс. Определите номер k самые близкие соседи потребовали для классификации пикселя как принадлежащий фоновой модели к 2.

kNNBase.setkNNSamples(2);

Выполните эти шаги, чтобы извлечь область переднего плана при помощи apply метод класса OpenCV BackgroundSubtractorKNN.

  • Создайте InputArray и OutputArray класс при помощи createMat Служебная функция MATLAB, чтобы сохранить входной видеокадр и выходную маску переднего плана соответственно.

  • apply метод берет видеокадры в качестве входных параметров и затем, вычисляет приоритетные пиксели при помощи алгоритма k-NN. apply метод хранит маску, содержащую приоритетные пиксельные области к OutputArray класс.

  • Экспортируйте выходную маску переднего плана, возвращенную apply метод к рабочему пространству MATLAB при помощи getImage Служебная функция MATLAB.

  • Извлеките желаемую область переднего плана при помощи приоритетной маски и входных видеокадров.

foregroundmask = zeros(videoSample.Height,videoSample.Width,videoSample.NumFrames);
while hasFrame(videoSample)
    frame = readFrame(videoSample);
    [inMat,imgInput] = util.createMat(frame);
    [outMat,outImg] = util.createMat();
    kNNBase.apply(imgInput,outImg);
    foregroundmask = util.getImage(outImg);
        
    foregroundmask = rescale(foregroundmask);
    foregroundmask = cast(foregroundmask,"like",frame);
    
    foreground(:,:,1) = frame(:,:,1).*foregroundmask;
    foreground(:,:,2) = frame(:,:,2).*foregroundmask;
    foreground(:,:,3) = frame(:,:,3).*foregroundmask;

    image(foreground,Parent=gca);
    pause(0.01);
end

Figure contains an axes object. The axes object contains an object of type image.

Смотрите также

Объекты

Функции

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте