当前位置: 首页 > news >正文

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

文章目录

  • 一、人脸检测流程介绍
  • 二、用于人脸检测的关键方法
    • 1.加载分类器(cv2.CascadeClassifier())
    • 2.检测图像中的人脸(cv2.CascadeClassifier.detectMultiscale())
  • 三、代码实现

一、人脸检测流程介绍

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

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

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

  • 在OpenCV库中,提供了多个用于检测人脸的Haar特征级联分类器,并以xml文件的形式存储,这些文件是预训练的,意味着它已经被训练好了,可以直接用于检测图像中的人脸
  • 下面链接中是对人脸检测的Haar特征和级联分类器的介绍:
    • https://blog.csdn.net/weixin_73504499/article/details/142883884?spm=1001.2014.3001.5501
  • 如何找到这些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 分别是矩形的宽度和高度

三、代码实现

  • 完整代码如下:
    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()
    
  • 结果如下:
    在这里插入图片描述
http://www.lryc.cn/news/459962.html

相关文章:

  • 【unity框架开发12】从零手搓unity存档存储数据持久化系统,实现对存档的创建,获取,保存,加载,删除,缓存,加密,支持多存档
  • YOLOv11进行图像与视频的目标检测
  • SpinalHDL之错误集(一)
  • 【arcgis】ArcGIS中如何避免标注压盖要素
  • 数通--3
  • SpringBoot基础(五):集成JUnit5
  • 正点原子学习笔记之汇编LED驱动实验
  • 网络学习第二篇
  • 一些小结汇总
  • 20240720 科大讯飞 笔试
  • 【AIGC】寻找ChatGPT最佳推理步骤:CoT思维链技术的探索与应用
  • 一、安装VMWARE和CentOS
  • 岩石分类检测数据集 4700张 岩石检测 带标注 voc yolo 9类
  • 电脑基础知识:mfc110.dll丢失的解决方法
  • Lua 协同程序(coroutine)
  • NASA:ARCTAS 区域的二级 FIRSTLOOK 气溶胶产品子集。 它包含气溶胶光学深度和粒子类型,以及相关的大气数据
  • go clean command
  • 鸿蒙NEXT开发-动画(基于最新api12稳定版)
  • HTML 入门
  • 前端面试题(十五)
  • 如何成为 Rust 核心贡献者?Rust 开发的核​​心是什么?Rust 重要技术专家揭秘
  • springboot + nacos + sofarpc 整合后报错403
  • 小米路由器R3Gv2安装openwrt记录
  • 记录一下,android studio 登录不上github的问题
  • springcloud之基于github webhook动态刷新服务配置
  • qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形
  • 【动态规划】子数组系列(下)
  • macos mendeley Unable to install the Microsoft Word Plugin 解决
  • 【Linux进程间通信】Linux信号机制深度解析:保存与处理技巧
  • 常见开源组件的详解