【OpenCV人脸识别入门教程之二】人脸检测 | 您所在的位置:网站首页 › 人脸分类器下载教程图片 › 【OpenCV人脸识别入门教程之二】人脸检测 |
大家好,又见面了,我是你们的朋友全栈君。 本篇文章主要介绍了如何使用OpenCV实现人脸检测。本文不具体讲解人脸检测的原理,直接使用OpenCV实现。 OpenCV版本:2.4.10;VS开发版本:VS2012。 一、OpenCV人脸检测 要实现人脸识别功能,首先要进行人脸检测,判断出图片中人脸的位置,才能进行下一步的操作。 1、OpenCV人脸检测的方法 在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar特征和LBP特征。 在OpenCV中,使用已经训练好的XML格式的分类器进行人脸检测。在OpenCV的安装目录下的sources文件夹里的data文件夹里可以看到下图所示的内容: ![]() 上图中文件夹的名字“haarcascades”、“hogcascades”和“lbpcascades”分别表示通过“haar”、“hog”和“lbp”三种不同的特征而训练出的分类器:即各文件夹里的文件。”haar”特征主要用于人脸检测,“hog”特征主要用于行人检测,“lbp”特征主要用于人脸识别。打开“haarcascades”文件夹,如下图所示 ![]() 图中的XML文件即是我们人脸检测所需要的分类器文件。在实际使用中,推荐使用上图中被标记的“haarcascade_frontalface_alt2.xml”分类器文件,准确率和速度都比较好。 2、OpenCV中的人脸检测的类 在OpenCV中,使用类“CascadeClassifier”进行人脸检测 代码语言:javascript复制CascadeClassifier faceCascade; //实例化对象所需要使用的函数: 代码语言:javascript复制faceCascade.load("../data/haarcascade_frontalface_alt2"); //加载分类器 faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0)); //多尺寸检测人脸实现人脸检测主要依赖于detectMultiScale()函数,下面简单说一下函数参数的含义,先看函数原型: 代码语言:javascript复制CV_WRAP virtual void detectMultiScale( const Mat& image, CV_OUT vector& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size() );各参数含义: const Mat& image: 需要被检测的图像(灰度图)vector& objects: 保存被检测出的人脸位置坐标序列double scaleFactor: 每次图片缩放的比例int minNeighbors: 每一个人脸至少要检测到多少次才算是真的人脸int flags: 决定是缩放分类器来检测,还是缩放图像Size(): 表示人脸的最大最小尺寸二、代码实现 1、检测图片中的人脸 代码语言:javascript复制//头文件 #include #include #include using namespace cv; //人脸检测的类 CascadeClassifier faceCascade; int main() { faceCascade.load("../data/haarcascade_frontalface_alt2.xml"); //加载分类器,注意文件路径 Mat img = imread("../data/PrettyGirl.jpg"); Mat imgGray; vector faces; if(img.empty()) { return 1; } if(img.channels() ==3) { cvtColor(img, imgGray, CV_RGB2GRAY); } else { imgGray = img; } faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0)); //检测人脸 if(faces.size()>0) { for(int i =0; i>img; if(img.channels() ==3) { cvtColor(img, imgGray, CV_RGB2GRAY); } else { imgGray = img; } faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0)); //检测人脸 if(faces.size()>0) { for(int i =0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |