OpenCV使用级联分类器实现人脸检测
一、概述
案例:使用opencv级联分类器CascadeClassifier+其提供的特征数据实现人脸检测,检测到人脸后使用红框画出来。
API介绍:
detectMultiScale( InputArray image, CV_OUT std::vector& objects,double scaleFactor = 1.1, int minNeighbors = 3, int flags = 0, Size minSize = Size(), Size maxSize = Size(), );
image:输入图像
objects:检测到的目标区域数组(因一副图像中有可能有多个人脸)
scaleFactor:搜索前后两次窗口大小比例系数,默认为1:1,即每次搜索窗口扩大10%
minNeighbors:构成检测目标的相邻矩形的最小个数 如果组成检测目标的小矩形的个数和小于minneighbors - 1 都会被排除,如果minneighbors为0 则函数不做任何操作就返回所有被检候选矩形框。
flags:若设置为CV_HAAR_DO_CANNY_PRUNING 函数将会使用Canny边缘检测来排除边缘过多或过少的区域,默认写0即可
minSize:检测的最小尺寸
maxSize:检测的最大尺寸
实现人脸检测的步骤:
1.实例化CascadeClassifier face_cascade
2.使用load加载特征数据
3.载入待检测图像
【OpenCV使用级联分类器实现人脸检测】4.图像灰度化
5.将灰度图进行直方图均衡化
6.进行多尺度检测,并输出检测到的人脸区域候选数组
7.将人脸区域数组绘制并显示到原图输出
二、代码示例
//加载特征数据 CascadeClassifier face_cascade; if(!face_cascade.load(xmlPath.toStdString())){ qDebug()<<"不能加载特征数据"; return; }Mat src = https://www.it610.com/article/imread(filePath); if(src.empty()){ qDebug()<<"图片不能为空"; return; } imshow("src",src); Mat gray; cvtColor(src,gray,COLOR_BGR2GRAY); //进行直方图均衡化 equalizeHist(gray,gray); //imshow("equalizHist",gray); //执行多尺度特征检测 vectorfaces; face_cascade.detectMultiScale(gray,faces,1.1,minTargetRectCount,0,Size(24,24)); for(size_t i = 0; i
三、示例图片
文章图片
文章图片
文章图片
文章图片
推荐阅读
- golang|一文读懂Go泛型设计和使用场景
- 如何使用GES进行社交关系考据(---GES查询能力介绍)
- SpringBoot为何可以使用Jar包启动详解
- Markdown使用技巧
- Flutter中抽屉组件Drawer使用详解
- 极光推送在APICloud平台的使用教程
- 博文推荐|使用|博文推荐|使用 Apache Pulsar 和 Scala 进行事件流处理
- vue2.x版本中computed和watch的使用入门详解-computed篇
- Skywalking|Skywalking 使用 ClickHouse 存储实践,性能提高 N 倍
- 树莓派+opencv进行摄像头云台颜色追踪