欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

OpenCV 从零学习 · 第 17 讲:人脸检测(Haar 级联分类器 detectMultiScale,经典的"框脸")

OpenCV 从零学习 · 第 17 讲:人脸检测

函数:cv2.CascadeClassifier / detectMultiScale | 难度:★★☆☆☆

人脸检测是计算机视觉的"hello world"。OpenCV 自带训练好的 Haar 级联分类器,加载一个 .xml 模型文件,调用 detectMultiScale 就能在一张图里找出所有人脸并框出来。无需训练、开箱即用,适合入门和实时场景。


一、加载分类器并检测

face_cascade = cv2.CascadeClassifier(
    cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
    gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
参数 含义
scaleFactor图像缩放步长,>1(如 1.1);越小越准越慢
minNeighbors候选框保留所需邻数,越大越严(去误检)
minSize最小目标尺寸,过滤太小的框

返回 numpy 数组,每行是 (x, y, w, h),可遍历画框。cv2.data.haarcascades 是 OpenCV 自带模型目录,免得自己找路径。

场景 A · 图片人脸框 + 计数
len(faces) 就是人数,遍历画绿框。合影人数统计的最简实现。
场景 B · 接第 16 讲做实时人脸
把检测放进摄像头循环,逐帧框脸——经典"实时人脸追踪"demo,可顺便统计画面里出现的人数。
场景 C · 眼睛 / 笑脸检测
同级联还有 haarcascade_eye.xmlhaarcascade_smile.xml,对同一张人脸区域再做一次检测即可做"睁眼/微笑"判断。
⚠ 新手必踩坑
  • detectMultiScale 吃灰度图,传彩色会报错或结果异常。
  • 分类器文件路径必须存在;用 cv2.data.haarcascades + 文件名 最稳,别硬编码本地绝对路径。
  • scaleFactor 太小(如 1.01)极慢,太大(如 1.5)会漏检,常用 1.1~1.3。
  • Haar 只认"正脸",侧脸/遮挡/太远效果差;精度要求高请升级 DNN 人脸检测(后续进阶)。

本讲要点

  • CascadeClassifier 加载 xml,detectMultiScale 返回 (x,y,w,h) 列表。
  • 输入灰度图;scaleFactor/minNeighbors/minSize 调严谨度。
  • 开箱即用、可实时;缺点是正脸专用、精度有限。

下一讲:第 18 讲 · 霍夫变换(HoughLines / HoughCircles)——检测直线和圆,用于车道线、表格线、圆孔计数。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功