【OpenCV笔记 16-1】OpenCV人脸检测之Haar分类器
发布时间:2020-12-16 02:18:43 所属栏目:百科 来源:网络整理
导读:本文将介绍如何利用OpenCV的Haar检测器实现人脸识别的 基本步骤: 1.用opencv实现人脸检测 2.加载Haar分类器 一般来说分类训练器的xml文件路径如下:....sourcesdatahaarcascadeshaarcascade_frontalface_alt.xml 每个人的安装位置不同,训练器的xml也不
|
本文将介绍如何利用OpenCV的Haar检测器实现人脸识别的 基本步骤:1.用opencv实现人脸检测 2.加载Haar分类器
3.载入图片,或者访问相机 4.利用前面加载的Haar检测器检测对象(人脸)
示例代码:#include<opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
string face_cascade_name = "haarcascade_frontalface_alt.xml";
//该文件存在于OpenCV安装目录下的sourcesdatahaarcascades内,需要将该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,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),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,1.1,Size(35,35));
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
