Opencv自带训练好的人脸模型(人脸的人眼、口等器官类似),此文基于vs2013建立应用台单文档程序,具体建立过程不予详细叙述,主要记录利用的Opencv自带的分类器和训练好的人脸模型。
一、编程前的准备
(1)Haar特征分类器
Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。
Haar特征分类器存放目录:OpenCV安装目录中的\data\ haarcascades目录下,例如:
……
(详情见不同版本的data/ haarcascades目录下)
例如此次程序进行人脸识别,需要将分类器haarcascade_frontalface_alt2.xm复制到所建项目的可运行文件夹内
(2).对CascadeClassifier做初始化
cv::CascadeClassifier classifier;
classifier.load(“cascade.xml”); //这里的xml是训练得到的分类器
CascadeClassifier类中既有load也有read函数,二者是相同的,load将引用read函数
(3 )关于detectMultiScale()
void detectMultiScale
(
const Mat& image,
CV_OUT vector<Rect>& objects,
double scaleFactor = 1.1,
int minNeighbors = 3,
int flags = 0,
Size minSize = Size(),
Size maxSize = Size()
);
函数介绍:
参数1:image--待检测图片,一般为灰度图像加快检测速度;
参数2:objects--被检测物体的矩形框向量组; 参数3:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%; 参数4:minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。 如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。 如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框, 这种设定值一般用在用户自定义对检测结果的组合程序上; 参数5:flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因此这些区域通常不会是人脸所在区域;
参数6、7:minSize和maxSize用来限制得到的目标区域的范围。
二、编程时的介绍
所编写程序的头文件包括:
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <vector>
#include <cstdio>
using namespace cv;
using namespace std;
笔者将人脸检测分为如下几个步骤:
(1)加载分类器:
(2)读取图片
(3)检测
(4)标记
(5)显示
具体程序实例如下:
三、编程后的展示
运行程序可得到待识别的原图和检测结果图以及显示共检测到的人脸个数:选取三组实验,其显示结果如图所示:
实验1:国民闺女
实验2:who?
实验3:可看过?
以上就是这一期内容,自己总结一遍确实加深了印象,cv之路漫长,希望自己好好学习,坚持下去,学会c++和python。。。