问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

OpenCV学习:检测图片中是否有人脸

创作时间:
作者:
@小白创作中心

OpenCV学习:检测图片中是否有人脸

引用
CSDN
1.
https://blog.csdn.net/briant_ccj/article/details/85467730

本文将介绍如何使用OpenCV库函数检测图片中是否有人脸。通过简单的几行代码,你将能够实现基本的人脸检测功能。

检测原理

  1. 通过CascadeClassifier::load()调用已经训练好的haar+adaboost人脸检测模型,参数就是模型的文件路径。
  • 作为初学者,自然是调用OpenCV自带的已经训练好的人脸检测模型。OpenCV提供了4种haar的人脸检测模型。
  • 这里调用的是haarcascade_frontalface_alt.xml。从这里可以看出一个训练好的人脸检测模型是一个xml文件。
  1. 通过调用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 error\r\n");  
}  

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 Face\r\n");  
}  

time = (double)getTickCount() - time;  
printf("time used %f", time * 1000 / getTickFrequency());  
imshow("image", image);  

效果展示


© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号