概述
使用OpenCV的库函数可以很容易的检测出一张图片中是否有人脸,仅仅几行代码就可以实现。
检测原理:
1. 通过CascadeClassifier::load()调用已经训练好的haar+adaboost人脸检测模型,参数就是模型的文件路径。
PS:作为初学者自然是调用OpenCV自带的已经训练好的人脸检测模型。opencv提供了4种haar的人脸检测模型。
这里调用的是haarcascade_frontalface_alt.xml。从这里看出一个训练好的人脸检测模型是一个xml文件。
2.通过调用CascadeClassifier::detectMultiScale检测人脸的位置。
待解决的问题,以后解决这些问题后,在问题后面贴出博客地址。
但是作为初学者目前仍有下面几个问题待解决:
1.这个模型是怎么训练出来的
2.从图二可以看到检测出来的效果不是很好的,这个是模型的问题?还是程序的问题?该怎么改进?
代码如下:
Mat image = imread("..\..\image\Lena.png", IMREAD_GRAYSCALE);
CascadeClassifier cascade;
double time = (double)getTickCount();
if (!cascade.load("../data/haarcascades/haarcascade_frontalface_alt.xml"))
{
printf("Cascade.load errorrn");
}
vector<Rect> faces(0);
cascade.detectMultiScale(image, faces, 1.1, 2, 0, Size(30, 30));
if (faces.size() > 0)
{
for (size_t i = 0; i < faces.size(); i++)
{
rectangle(image, faces[i], Scalar(150, 0, 0), 3, 8, 0);
}
}
else
{
printf("No Facern");
}
time = (double)getTickCount() - time;
printf("time used %f", time * 1000 / getTickFrequency());
imshow("image", image);
效果如下
最后
以上就是高挑鱼为你收集整理的OpenCV学习8-检测图片中是否有人脸的全部内容,希望文章能够帮你解决OpenCV学习8-检测图片中是否有人脸所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复