《OpenCV计算机视觉》—— 人脸检测

文章目录

一、人脸检测流程介绍

  • 下面是一张含有多个人脸的图片
    • 第一步:读取图片后将图片转换成灰度图
    • 第二步:在灰度图中进行特征检测,并检测出各个人脸的特征信息
    • 第三步:将各个人脸的特征信息保存下来
    • 第四部:根据检测出的人脸的特征信息,在原图中用矩形框,框出每个人的脸部区域
  • 最终的结果如下:

二、用于人脸检测的关键方法

1.加载分类器(cv2.CascadeClassifier())

  • 在OpenCV库中,提供了多个用于检测人脸的Haar特征级联分类器 ,并以xml文件的形式存储,这些文件是预训练的,意味着它已经被训练好了,可以直接用于检测图像中的人脸
  • 下面链接中是对人脸检测的Haar特征和级联分类器的介绍:
  • 如何找到这些xml文件呢?
    • 这些 xml文件存在我们pycharm的环境中,通过下图中的步骤找到:
  • 找到这些文件后通过 cv2.CascadeClassifier() 加载分类器
    • cv2.CascadeClassifier 是 OpenCV 库中用于加载和训练级联分类器的一个类

2.检测图像中的人脸(cv2.CascadeClassifier.detectMultiscale())

  • 在OpenCV中,cv2.CascadeClassifier 类有一个非常重要的方法叫做 detectMultiScale(),这个方法专门用于在图像中检测对象。detectMultiScale() 方法会搜索图像中所有可能匹配预训练分类器(如Haar或LBP特征分类器)的对象,并返回这些对象的位置(通常以矩形框的形式)。

  • 下面是 detectMultiScale() 方法的一些关键参数和它们的含义

    • image:要搜索的输入图像,通常是一个灰度图像(因为颜色信息对于Haar特征来说不是必需的,而且灰度图像处理起来更快)。
    • scaleFactor:图像缩放的比例因子。在检测过程中,图像会按照这个比例因子逐步缩小,以便在不同的尺度上搜索对象。例如,scaleFactor=1.05 意味着每次迭代图像都会缩小5%。
    • minNeighbors:每个候选矩形框需要有多少个相邻的矩形框来保留该框。这个参数有助于消除错误的检测。例如,如果设置为3,那么只有当至少有3个矩形框重叠时,该框才会被保留。
    • flags:一些可选的标志,用于修改检测过程的行为。例如,cv2.CASCADE_SCALE_IMAGE 会告诉分类器在检测之前自动缩放图像(但通常这个标志是默认启用的,所以不需要显式设置)。
    • minSizemaxSize:对象的最小和最大可能尺寸(以像素为单位)。这些参数可以帮助减少不必要的搜索区域,并加快检测速度。
    • 返回值 :detectMultiScale() 方法返回一个矩形框的列表 (每个框都是一个 (x, y, w, h) 元组,其中 (x, y) 是矩形左上角的坐标,w 和 h 分别是矩形的宽度和高度

三、代码实现

  • 完整代码如下:

    python 复制代码
    import cv2
    
    """ 加载图片,并将图片转换为灰度图 """
    image = cv2.imread('face.png')
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
    """ 加载分类器 """
    # 'haarcascade_frontalface_default.xml' 用于检测正面人脸的Haar特征的级联分类器
    faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    
    """ 使用分类器对人脸进行检测 """
    faces = faceCascade.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=9, minSize=(8, 8))
    print("发现{}张人脸".format(len(faces)))
    print("其位置分别是:", faces)
    
    """ 遍历每一个人脸的特征,并用矩形框将人脸部位框出 """
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
    
    """ 显示结果 """
    cv2.imshow("result", image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  • 结果如下:

相关推荐
亚马逊云开发者2 分钟前
Agentic AI基础设施实践经验系列(二):专用沙盒环境的必要性与实践方案
人工智能
rengang6611 分钟前
01-深度学习概述:介绍深度学习的基本概念和发展背景
人工智能·深度学习
Baihai_IDP13 分钟前
探讨超长上下文推理的潜力
人工智能·面试·llm
文火冰糖的硅基工坊15 分钟前
[人工智能-大模型-116]:模型层 - 用通俗易懂的语言,阐述离散卷积的神奇功能和背后的物理意义
人工智能·深度学习·cnn
rengang6617 分钟前
13-卷积神经网络(CNN):探讨CNN在图像处理中的应用和优势
图像处理·人工智能·深度学习·神经网络·cnn
DO_Community21 分钟前
裸金属 vs. 虚拟化 GPU 服务器:AI 训练与推理应该怎么选
运维·服务器·人工智能·llm·大语言模型
CoovallyAIHub21 分钟前
未来已来:从 CVPR & ICCV 观察 2025→2026 年计算机视觉的七大走向
深度学习·算法·计算机视觉
科技峰行者24 分钟前
华为发布Atlas 900 DeepGreen AI服务器:单机柜100PF算力重构AI训练基础设施
服务器·人工智能·华为·aigc·gpu算力
weixin_3077791335 分钟前
应对不规则负载的异步ML模型服务AWS架构设计
人工智能·深度学习·机器学习·云计算·aws
Xander W1 小时前
基于K8s集群的PyTorch DDP 框架分布式训练测试(开发机版)
人工智能·pytorch·分布式·python·深度学习·kubernetes