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