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

createMat | getImage | createUMat | readFrame | clibArray | rectToBbox | insertShape