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

news2024/11/25 16:51:24

文章目录

  • 一、人脸检测流程介绍
  • 二、用于人脸检测的关键方法
    • 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.coloradmin.cn/o/2212081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子电气架构---软件定义汽车,产业变革

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…

影刀RPA实战:操作Mysql数据库

1.摘要 影刀RPA(Robotic Process Automation)是一种软件自动化工具,它可以模拟人类用户执行各种重复性任务,其中包括对数据库的操作。 我们可以使用软件自动化指令,通过获取数据库窗口对象来操作数据库,也…

JSP 的 response 和 session 内置对象

文章目录 前言一、response 内置对象 1.重定向网页2.处理 HTTP 文件头3.设置输出缓存二、session 内置对象 1.创建及获取客户会话2.会话中移动指定的绑定对象3.销毁 session 内置对象4.会话超时的管理5. session 对象的应用总结 前言 JSP 的 response 和 session 内置对像&…

linux tar 打包文件去掉文件所在路径

一、准备目录 /root/tmp/images /root/tmp/images2 执行命令打包目录/root/tmp/images 到 /root/tmp/images.tar.gz 再解压到/root/tmp/images2 cd /root/tmp/images && tar -cvzf images.tar.gz * && mv images.tar.gz /root/tmp/ tar -C /root/tmp/image…

ctf.bugku-baby lfi 2

题目来源:baby lfi 2 - Bugku CTF平台 访问页面 翻译解析:百度翻译-您的超级翻译伙伴(文本、文档翻译) (baidu.com) LFI Warmups- level 2 -本地文件包含(Local File Inclusion,简称LFI) Hello…

力扣面试150 交错字符串 二维DP

Problem: 97. 交错字符串 👨‍🏫 参考题解 class Solution {public boolean isInterleave(String s1, String s2, String s3) {int m s1.length();int n s2.length();if(s3.length() ! m n) return false;boolean[][] dp new boolean[m1][n1];dp[0]…

ZYNQ使用XGPIO驱动外设模块(后半部分)

目录 注意重点: 一、SDK代码开发部分: 显示所需的字符编码: 1.用于显示8x16的字符函数: 2.绘制图片: 3.清楚给定两个坐标之间的显示: 4.显示16*32的阿拉伯数字字符: 5.显示16*32的整型数字&#xff…

Excel:vlookup函数实现查找

1.要查找宋江的英语,把鼠标放在对应单元格然后开始编辑 2.选中所选区域,点击F4锁定区域,不然下拉填充的时候会变VLOOKUP 在查找时有严格要求,查找值必须在所选区域的第一列,因此如果你的查找值不在第一列,可…

TGRS 2024 面向雾天遥感图像的定向目标检测算法

TGRS 2024 | 面向雾天遥感图像的定向目标检测算法 论文信息 摘要 目前,大量工作集中在航空目标检测上,并取得了良好的结果。尽管这些方法在传统数据集上取得了有希望的结果,但在恶劣天气条件下捕获的低质量图像中定位对象仍然具有挑战性。目…

RabbitMQ 入门(四)SpringAMQP五种消息类型

一、WorkQueue(工作消息队列) Work queues,也被称为(Task queues),任务模型。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。 当消息处理比较耗时的时候,可能生产消息的速度会远远大于…

【亲测可行】ubuntu下载安装c++版opencv4.7.0和4.5.0 安装opencv4.5.0报错及解决方法

文章目录 🌕系统配置🌕打开终端,退出anacoda激活环境(如果有的话)🌕安装依赖🌙安装g, cmake, make, wget, unzip,若已安装,此步跳过🌙安装opencv依赖的库🌙安装可选依赖 …

关于md5强比较和弱比较绕过的实验

在ctf比赛题中我们的md5强弱比较的绕过题型很多,大部分都是结合了PHP来进行一个考核。这一篇文章我将讲解一下最基础的绕过知识。 MD5弱比较 比较的步骤 在进行弱比较时,PHP会按照以下步骤执行: 确定数据类型:检查参与比较的两…

要笑死了java

有一天,Java开发者Jack对他的朋友说:“最近我总感觉自己被逼得喘不过气。” 朋友问:“为什么啊?” Jack叹了口气道:“因为我一直在try里,但从来没有catch到过break!” 为什么程序员总是分不清圣…

【Ubuntu】“Linux版PhotoShop”绘图软件的安装和汉化

【Ubuntu】“Linux版PhotoShop”绘图软件的安装和汉化 零、前言 最近换了Linux系统,但是写教程做PPT的时候还是得用到绘图软件,上网一查,总结对比之后发现Krita比较好用,故此讲解一下如何安装和汉化Krita。 壹、安装 安装很简…

spring 如何将mutipartFile转存到本地磁盘

两者的区别和联系 MutipartFile是spring的一部分,File则是java的标准类MutipartFile用于接收web传递的文件,File操作本地系统的文件 MutipartFile 转换File的三种方式 使用MutipartFile 自带的transferTo方法使用java自带的FileOutPutStream流使用java自…

AirServer v7.2.7 破解版 – iPhone屏幕镜像工具

AirServer v7.2.7 破解版 – iPhone屏幕镜像工具可以将你的Mac转变为一个通用的镜像接收器,除了无法接收Miracast外,你可以使用内置的AirPlay或Google Cast基于屏幕投影功能来镜像你的设备屏幕;一次一个或同时投影到AirServer。用户可以从任何…

基于stm32的HAL库的串口实现不定长中断(空闲中断)(四)

串口实现不定长中断(空闲中断) 目录 串口实现不定长中断(空闲中断) 1、串口头文件 2、串口初始化配置 3、msp公用的一个函数这里有三个串口,都会调用msp先进行一个判断 4、对接收数组进行清空 5、中断服务函数--…

HDLBits中文版,标准参考答案 | 3.2.5 Finite State Machines | 有限状态机(5)

关注 望森FPGA 查看更多FPGA资讯 这是望森的第 20 期分享 作者 | 望森 来源 | 望森FPGA 目录 1 Q6b: FSM next-state logic | Q6b:FSM 下一状态逻辑 2 Q6c: FSM one-hot next-state logic | Q6c:FSM 独热下一状态逻辑 3 Q6: FSM 4 Q2a: FSM 5 Q2b…

R编程环境的搭建

【图书推荐】《R语言医学数据分析实践》-CSDN博客 R语言对编程环境的要求不高,可以在多种操作系统平台上运行,包括Windows、macOS和Linux。要运行R语言,需要安装R解释器。可以从R语言的官方网站下载和安装最新版本。R语言还需要一个集成开发…

【可答疑】基于51单片机的水位检测系统(含仿真、代码、报告、演示视频等)

✨哈喽大家好,这里是每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~ 🐱‍🐉这是51单片机毕业设计100篇…