В этом примере показано, как вычесть знания в последовательности изображений, или видео при помощи предварительно созданного интерфейса 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

createMat | rescale | getImage | createUMat | readFrame | getBasePtr | cast