这个例子展示了如何使用预构建的MATLAB®接口OpenCV函数检测图像或视频中的人脸简历:CascadeClassifier
.本例使用了一个Harr人脸检测模型,该模型经过训练可以进行尺度不变的正面人脸检测。在本例中,您还使用了createMat
函数来定义输入和输出数组getImage
函数读取OpenCV函数返回的输出图像rectToBbox
实用函数将OpenCV函数返回的人脸检测输出转换为MATLAB®中的边界框坐标。
读一个视频到MATLAB工作空间使用VideoReader
MATLAB函数。
videoSample = VideoReader (“tilted_face.avi”);
将MATLAB接口的OpenCV包名称添加到导入列表中。
进口clib.opencv。*;进口vision.opencv.util。*;
指定预先训练过的Haar人脸检测模型的文件名。
trainedModel =“haarcascade_frontalface_alt.xml”;
加载预先训练的模型使用负载
方法简历。CascadeClassifier
.
cascadeClassify = cv.CascadeClassifier ();cascadeClassify.load (trainedModel);
指定用于多尺度检测的比例因子。
scaleFactor = 1.2;
按照以下步骤来检测每一帧中的人脸detectMultiScale
OpenCV类的简历。CascadeClassifier
.
创建一个垫
对象并将输入帧存储到垫
对象的createMat
函数。指定垫
对象的输入detectMultiScale
方法。
创建一个MATLAB数组来表示2D矩形的OpenCV类简历:Rect2i
.控件的输入指定数组detectMultiScale
方法。该方法使用数组返回检测结果。
导出系统返回的检测结果detectMultiScale
方法来获取行向量rectToBbox
函数。行向量在基于1的索引中指定边界框坐标。
在输入框上绘制边界框来表示检测到的人脸。
数= 1;检测=细胞(1、videoSample.NumFrames);而(hasFrame(videsample)) testFrame = readFrame(videsample);[inputMat, inputArray] = createMat (testFrame);结果= clibArray (“clib.opencv.cv.Rect2i”, 0);cascadeClassify.detectMultiScale (inputArray,结果,scaleFactor);如果结果。Dimensions ~= 0 detection{count} = rectToBbox(results);其他的检测{数}= [];结束testFrame = insertShape (testFrame矩形=检测{},线宽= 5);图像(testFrame、家长= gca);暂停(0.01)count = count+1;结束