【OpenCV笔记 16-1】OpenCV人脸检测之Haar分类器
2016-07-29 11:02
465 查看
本文将介绍如何利用OpenCV的Haar检测器实现人脸识别的
2.加载Haar分类器
一般来说分类训练器的xml文件路径如下:....\sources\data\haarcascades\haarcascade_frontalface_alt.xml
每个人的安装位置不同,训练器的xml也不同,我的是opencv3.0,需要将该xml文件复制到当前工程目录下
使用 CascadeClassifier 类来检测视频流中物体. 特别地, 我们将使用函数:load 来加载一个 .xml 分类器文件,detectMultiScale 来进行图像的多尺度检测.
3.载入图片,或者访问相机
4.利用前面加载的Haar检测器检测对象(人脸)
将彩色图转换为灰度图
收缩摄像机图像(前提是访问摄像头)
直方图均衡化
图片1:
检测正确率约为81% , 27人中检测出22人,可以看出跟图片质量关系很大,漏检主要在后排。
![](http://img.blog.csdn.net/20160729151626574?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20160729151638777?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20160729151633105?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
==============================================================
图片2: 检测正确率约为100% , 全部识别。(注意:相应的函数参数也发生变化)
参数修改后代码:
![](http://img.blog.csdn.net/20160729152509665?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20160729152515196?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
基本步骤:
1.用opencv实现人脸检测2.加载Haar分类器
一般来说分类训练器的xml文件路径如下:....\sources\data\haarcascades\haarcascade_frontalface_alt.xml
每个人的安装位置不同,训练器的xml也不同,我的是opencv3.0,需要将该xml文件复制到当前工程目录下
使用 CascadeClassifier 类来检测视频流中物体. 特别地, 我们将使用函数:load 来加载一个 .xml 分类器文件,detectMultiScale 来进行图像的多尺度检测.
3.载入图片,或者访问相机
4.利用前面加载的Haar检测器检测对象(人脸)
将彩色图转换为灰度图
收缩摄像机图像(前提是访问摄像头)
直方图均衡化
示例代码:
#include<opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; string face_cascade_name = "haarcascade_frontalface_alt.xml"; //该文件存在于OpenCV安装目录下的\sources\data\haarcascades内,需要将该xml文件复制到当前工程目录下 CascadeClassifier face_cascade; void detectAndDisplay(Mat frame); int main(int argc, char** argv) { Mat srcImage; //============载入并显示人脸图片========= srcImage = imread("image/ITboss.jpg", 1); //当前工程image目录下的jpg文件,注意目录符号 imshow("原图", srcImage); //============加载分类器========= if (!face_cascade.load(face_cascade_name)) { printf("级联分类器错误,可能未找到文件,请拷贝该文件到工程目录下!\n"); return -1; } //============调用人脸检测函数 ========= detectAndDisplay(srcImage); waitKey(0);//暂停显示一下,ESC退出 } //= == == == == == =自定义人脸检测函数 == == == == void detectAndDisplay(Mat dispFace) { //定义变量 std::vector<Rect> faces; Mat srcFace,grayFace,eqlHistFace; cvtColor(dispFace, grayFace, CV_BGR2GRAY); //rgb类型转换为灰度类型 equalizeHist(grayFace, eqlHistFace); //直方图均衡化 face_cascade.detectMultiScale(eqlHistFace, faces, 1.01, 1, 0 | CV_HAAR_SCALE_IMAGE, Size(5, 5), Size(22,23)); //增大第四个参数可以提高检测精度,但也可能会造成遗漏 //人脸尺寸minSize和maxSize,关键参数,自行设定,随图片尺寸有很大关系, for (unsigned int i = 0; i < faces.size(); i++) { Point center(faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2); //用绿色椭圆标记检测到的人脸 ellipse(dispFace, center, Size(faces[i].width*1/2, faces[i].height*65/100), 0, 0, 360, Scalar(50, 255, 0), 2, 8, 0); } //输出 cout << "共检测到人脸: " << faces.size() <<" 张"<<endl; imshow("人脸识别结果", dispFace); }
检测结果:
总共试验了两张图片,第一张2015年很火的图片,国内IT大佬岁习大大访美合影;第二张NBA球星合影。图片1:
检测正确率约为81% , 27人中检测出22人,可以看出跟图片质量关系很大,漏检主要在后排。
==============================================================
图片2: 检测正确率约为100% , 全部识别。(注意:相应的函数参数也发生变化)
参数修改后代码:
face_cascade.detectMultiScale(eqlHistFace, faces, 1.1, 1, 0 | CV_HAAR_SCALE_IMAGE, Size(5, 5), Size(35,35));
相关文章推荐
- 【OpenCV笔记 16-2】OpenCV人脸检测和人眼检测之LBP分类器
- 【OpenCV】浅析人脸检测之Haar分类器方法
- OpenCVForUnity使用Haar分类器检测人脸和眼睛
- 使用opencv2.0的haar算法人脸检测分类器训练xml
- OpenCV中基于Haar特征和级联分类器的人脸检测
- OpenCV学习笔记:人脸检测(级联分类器)
- 用opencv自带的Haar分类器进行人脸检测(二)
- 基于Haar分类器的OpenCV人脸检测实例
- 程序员的机器学习入门笔记(九):人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
- OpenCV学习笔记:基于Haar特征的人脸检测
- OpenCV中基于Haar特征和级联分类器的人脸检测
- 人脸检测——OpenCV的分类器的haar特征数据
- OpenCV Haar分类器人脸检测部分代码注释
- 用opencv自带的Haar分类器进行人脸检测(一)
- [转] 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
- 基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法
- 自己用opencv训练人脸检测的分类器,检测不出人脸
- 基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法
- OpenCV 人脸检测自学笔记(8)_读trainCascade的训练结果的代码笔记
- 浅析人脸检测之Haar分类器方法