Выполните обнаружение поверхности при помощи OpenCV в MATLAB

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

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

videoSample = VideoReader("tilted_face.avi");

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

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

Задайте имя файла предварительно обученной обученной модели обнаружения поверхности Хаара.

trainedModel = "haarcascade_frontalface_alt.xml";

Загрузите предварительно обученную модель при помощи load метод OpenCV функционирует cv.CascadeClassifier.

cascadeClassify = cv.CascadeClassifier();
cascadeClassify.load(trainedModel);

Задайте масштабный коэффициент, чтобы использовать для многошкального обнаружения.

scaleFactor = 1.2;

Выполните эти шаги, чтобы обнаружить поверхности в каждой системе координат при помощи detectMultiScale метод класса OpenCV cv.CascadeClassifier.

  • Создайте Mat возразите и сохраните входной кадр к Mat объект при помощи createMat функция. Задайте Mat возразите как вход против detectMultiScale метод.

  • Создайте массив MATLAB, чтобы представлять класс OpenCV для 2D прямоугольников cv::Rect2i. Задайте массив как вход к detectMultiScale метод. Метод использует массив, чтобы возвратить результаты обнаружения.

  • Экспортируйте результаты обнаружения, возвращенные detectMultiScale метод к вектору-строке при помощи rectToBbox функция. Вектор-строка задает координаты ограничительной рамки в индексации на основе одной.

  • Чертите ограничительные рамки на входном кадре, чтобы представлять обнаруженные поверхности.

count = 1;
detections = cell(1,videoSample.NumFrames);
while(hasFrame(videoSample))
    testFrame = readFrame(videoSample);

    [inputMat,inputArray] = createMat(testFrame);
    results = clibArray("clib.opencv.cv.Rect2i", 0);

    cascadeClassify.detectMultiScale(inputArray,results,scaleFactor);
    if results.Dimensions ~= 0
        detections{count} = rectToBbox(results);
    else
        detections{count} = [];
    end
    testFrame = insertShape(testFrame,Rectangle=detections{count},LineWidth=5);
    image(testFrame,Parent=gca);
    pause(0.01)
    count = count+1;
end

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

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

Объекты

Функции

Похожие темы