ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenCV中的人脸检测

OpenCV中的人脸检测 一、介绍本次将使用OpenCV的Haar级联分类器对一张静态图片进行人脸检测在检测到的每个人脸周围绘制绿色矩形框并输出检测到的人脸数量和位置坐标。二、Haar级联分类器工作原理特征使用Haar-like矩形特征(边缘、线段、中心特征通过积分图快速计算。训练Adaboost算法挑选关键特征并组合成弱分类器再级联成强分类器。检测滑动窗口在不同尺度的图像金字塔上扫描每一级快速排除非人脸区域最终通过所有级的区域被判定为人脸。三、核心代码讲解3.1 首先导入cv2,读取图像。3.2将原图转换为灰度图Haar级联分类器要求输入为灰度图像(单通道)因为特征计算基于亮度差异忽略颜色信息可以减少计算量并提高检测稳定性。cv2.cvtColor()将BGR转换为灰度3.3加载Haar级联分类器cv2.CascadeClassifier()创建一个级联分类器对象。cv2.data.haarcascades是OpenCV自带的预训练Haar特征XML文件所在目录的路径haarcascade_frontalface_default.xml是用于检测正面人脸的经典模型。该分类器基于AdaBoost训练包含多个阶段的强分类器通过级联方式快速排除非人脸区域。3.4执行人脸检测detectMultiScale()是核心检测函数返回一个列表每个元素为(x, y, w, h)表示人脸矩形左上角坐标和宽高。scaleFactor1.05:图像金字塔的缩放比例。每次将图像缩小为原来的 1/1.05 ≈ 0.952以检测不同大小的人脸。值越接近 1搜索的尺度越精细耗时越长但漏检率降低值过大如 1.3则速度更快但可能漏检小脸。这里 1.05 较精细。minNeighbors9每个候选矩形至少需要多少个邻近检测框才被保留。值越大对误检的抑制越强但也会漏掉一些真正的人脸尤其当人脸被遮挡或角度不佳时。常用范围 3~6这里设置为 9 较为严格适合高精度需求。minSize(8,8):检测目标的最小尺寸像素。小于该尺寸的人脸会被忽略可以加快检测速度并过滤噪声。这里 8×8 非常小几乎能检测任何微小人脸但实际效果受模型训练尺度影响。输出faces是一个二维数组例如[[112, 45, 80, 80], [300, 150, 60, 60]]3.5 绘制矩形框遍历每个人脸矩形在原图上绘制绿色边框。cv2.rectangle()参数图像、左上角坐标、右下角坐标、颜色(BGR,此处是绿色、线宽。
返回列表