在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar特征和LBP特征。
在OpenCV中,使用已经训练好的XML格式的分类器进行人脸检测。在OpenCV的安装目录下的sources文件夹里的data文件夹里可以看到下图所示的内容:
image.png上图中文件夹的名字“haarcascades”、“hogcascades”和“lbpcascades”分别表示通过“haar”、“hog”和“lbp”三种不同的特征而训练出的分类器:即各文件夹里的文件。"haar"特征主要用于人脸检测,“hog”特征主要用于行人检测,“lbp”特征主要用于人脸识别。打开“haarcascades”文件夹,如下图所示
image.png图中的XML文件即是我们人脸检测所需要的分类器文件。在实际使用中,推荐使用上图中被标记的“haarcascade_frontalface_alt2.xml”分类器文件,准确率和速度都比较好。
图片中的人脸检测
//头文件
#include<opencv2/objdetect/objdetect.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
//人脸检测的类
CascadeClassifier faceCascade;
int main()
{
faceCascade.load("../data/haarcascade_frontalface_alt2.xml"); //加载分类器,注意文件路径
Mat img = imread("../data/PrettyGirl.jpg");
Mat imgGray;
vector<Rect> 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<faces.size(); i++)
{
rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
Scalar(0, 255, 0), 1, 8); //框出人脸位置
}
}
imshow("FacesOfPrettyGirl", img);
waitKey(0);
return 0;
}
视频/摄像头中的人脸检测
//头文件
#include<opencv2/objdetect/objdetect.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
//人脸检测的类
CascadeClassifier faceCascade;
int main()
{
faceCascade.load("../data/haarcascade_frontalface_alt2.xml"); //加载分类器,注意文件路径
VideoCapture cap;
cap.open(0); //打开摄像头
//cap.open("../data/test.avi"); //打开视频
Mat img, imgGray;
vector<Rect> faces;
int c = 0;
if(!cap.isOpened())
{
return 1;
}
while(c!=27)
{
cap>>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<faces.size(); i++)
{
rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
Scalar(0, 255, 0), 1, 8); //框出人脸位置
}
}
imshow("Camera", img);
c = waitKey(1);
}
return 0;
}
人脸检测
【OpenCV人脸识别入门教程之二】人脸检测 - 生活,哭泣着奔向死亡,又放不下理想,挣扎着歌唱 - CSDN博客 https://blog.csdn.net/lsq2902101015/article/details/47057081
OpenCV人脸检测(完整源码+思路) - IT1995的博客 - CSDN博客 https://blog.csdn.net/qq78442761/article/details/61918994
人脸检测是人脸识别的基础,人脸识别的文章:
https://blog.csdn.net/qq78442761/article/details/61918994
网友评论