OpenCV人脸检测

作者:追风剑情 发布于:2024-5-26 15:38 分类:OpenCV

函数介绍

在OpenCV中,人脸检测使用的是cv2.CascadeClassifier.detectMultiScale()函数,它可以检测出图片中所有的人脸。该函数由分类器对象调用,其语法格式为:


objects = cv2.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:目标的最大尺寸,大于这个尺寸的目标将被忽略。
  • objects:返回值,目标对象的矩形框向量组。

示例:人脸检测

import cv2
# 读取待检测的图像
image = cv2.imread('dface3.jpg')
# 获取XML文件,加载人脸检测器
faceCascade = cv2.CascadeClassifier('D:\Software\Anaconda\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
# 转为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 调用函数 detectMultiScale
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.15,
    minNeighbors=5,
    minSize=(5,5)
    )
print(faces)
# 逐个标注人脸
for(x,y,w,h) in faces:
    # 矩形标注
    #cv2.rectangle(image, (x,y), (x+w,y+h), (0,255,0), 2)
    # 圆形标注
    cv2.circle(image, (int((x+x+w)/2), int((y+y+h)/2)), int(w/2), (0, 255, 0), 2)
# 显示结果
cv2.imshow("Face Detection", image)
# 保存检测结果
cv2.imwrite("re.jpg", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果
22222.png

标签: OpenCV

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号