【深度学习】OpenCV 人脸检测实战:使用 Haar 级联分类器实现人脸识别

📅 2026/7/2 3:27:31
【深度学习】OpenCV 人脸检测实战:使用 Haar 级联分类器实现人脸识别
文章目录完整代码一览读取图像并灰度化加载 Haar 级联分类器执行人脸检测绘制矩形框并显示结果拓展 —— 检测多张人脸完整代码一览import cv2 imagecv2.imread(peop.png)graycv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#----------------加载分类器----------------xml_filecv2.data.haarcascadeshaarcascade_frontalface_default.xmlfaceCascadecv2.CascadeClassifier(xml_file)#----------------分类器检测实现人脸识别----------------facesfaceCascade.detectMultiScale(gray,scaleFactor1.05,minNeighbors3,minSize(8,8))print(发现{}张人脸!.format(len(faces)))print(其位置分别是,faces)#----------------标注人脸及显示----------------for(x,y,w,h)in faces:cv2.rectangle(image,pt1(x,y),pt2(xw,yh),color(0,255,0),thickness2)cv2.imshow(result,image)cv2.waitKey(0)cv2.destroyAllWindows()读取图像并灰度化import cv2 imagecv2.imread(peopel.png)graycv2.cvtColor(image,cv2.COLOR_BGR2GRAY)人脸检测器通常工作在灰度图像上因为灰度图能减少计算量而且 Haar 特征是基于亮度变化的不依赖颜色。所以用 cvtColor 转为灰度图。加载 Haar 级联分类器xml_filecv2.data.haarcascadeshaarcascade_frontalface_default.xml# 这是 正面人脸检测 的预训练模型。 faceCascadecv2.CascadeClassifier(xml_file)# 加载 XML 文件生成一个级联分类器对象cv2.data.haarcascades这是 OpenCV 内置的 Haar 级联分类器 XML 文件存放路径。不同版本的 OpenCV 路径可能不同但用这个变量可以自动定位。除了默认的人脸模型OpenCV 还提供了其他模型如眼部、微笑、猫脸等。你可以替换文件名试试效果。执行人脸检测facesfaceCascade.detectMultiScale(gray,scaleFactor1.05,minNeighbors3,minSize(8,8))print(发现{}张人脸!.format(len(faces)))print(其位置分别是,faces)objectscv2.CascadeClassifier.detectMultiScale(image[,scaleFactor[,minNeighbors[,flags[,minSize[,maxSize]]]]])其中各个参数及返回值的含义如下。image待检测图像通常为灰度图像。scaleFactor表示在前后两次相继扫描中搜索窗口的缩放比例。识别扫描按照不同比例来进行扫描minNeighbors表示构成检测目标的相邻矩形的最小个数。在默认情况下该参数的值为 3.表示有 3 个以上的检测标记存在时才认为存在人脸。如果希望提高检测的准确率可以将该参数的值设置得更大但这样做可能会让一些人脸无法被检测到。flags该参数通常被省略。在使用低版本 OpenCV (OpenCV 1.X 版本)时该参数可能会被设置CV_HAAR_DO_CANNY_PRUNING表示使用 Canny 边缘检测器拒绝一些区域。minSize目标的最小尺寸小于这个尺寸的目标将被忽略。maxSize目标的最大尺寸大于这个尺寸的目标将被忽略。若 maxSize 和 minSize 大小一致则表示仅在一个尺度上查找目标。返回值faces(objects )一个包含所有检测到的人脸矩形框的 NumPy 数组每个元素是 (x, y, w, h)分别代表矩形左上角的 x、y 坐标以及宽度和高度。绘制矩形框并显示结果for(x,y,w,h)in faces:cv2.rectangle(image,pt1(x,y),pt2(xw,yh),color(0,255,0),thickness2)cv2.imshow(result,image)cv2.waitKey(0)cv2.destroyAllWindows()运行结果拓展 —— 检测多张人脸本代码直接支持多张人脸检测因为 detectMultiScale 会返回所有符合条件的目标。如果你的图片中有多个人程序会自动画出所有矩形框。