主要内容

在MATLAB中使用OpenCV实现人脸检测

这个例子展示了如何使用预构建的MATLAB®接口OpenCV函数检测图像或视频中的人脸简历:CascadeClassifier.本例使用了一个Harr人脸检测模型,该模型经过训练可以进行尺度不变的正面人脸检测。在本例中,您还使用了createMat函数来定义输入和输出数组getImage函数读取OpenCV函数返回的输出图像rectToBbox实用函数将OpenCV函数返回的人脸检测输出转换为MATLAB®中的边界框坐标。

读一个视频到MATLAB工作空间使用VideoReaderMATLAB函数。

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;

按照以下步骤来检测每一帧中的人脸detectMultiScaleOpenCV类的简历。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;结束

图中包含一个轴对象。axis对象包含一个image类型的对象。

另请参阅

对象

功能

相关的话题