数字图像处理(实践篇)二十二 使用opencv进行人脸、眼睛、嘴的检测

目录

1 xml文件

2 涉及的函数

3 实践


使用opencv进行人脸、眼睛、嘴的检测。

1 xml文件

  • 方法① 下载

 地址:https://github.com/opencv/opencv/tree/master/data/haarcascades

点击haarcascade_frontalface_default.xml文件

对着Raw右键,选择“链接另存为”,选择代码所在的路径即可,就可以下载这个文件啦。

其他文件的下载方式与上述文件的方式类似。

  • 方法② 文件路径

如果已经安装OpenCV,那么可以在安装OpenCV的环境中找到这个文件。

/anaconda3/envs/python/lib/python/site-packages/cv2/data/haarcascade_frontalface_default.xml

具体的情况按照实际的去对照哈。

如果没有安装OpenCV的话,可以使用如下命令安装:

pip install opencv-python

找对应文件路径的方法如上。

建议使用方法获取需要的文件。

2 涉及的函数

CascadeClassifier是Opencv中做人脸检测的一个级联分类器,既可以使用Haar特征,也可以使用LBP特征。要使用Haar级联分类器进行人脸检测,首先需要加载相应的分类器文件,haarcascade_frontalface_default.xml。然后,将图像转换为灰度图像,并使用detectMultiScale()函数进行人脸的检测操作。

  • cv2.CascadeClassifier.detectMultiScale()函数
objects = cv2.CascadeClassifier.detectMultiScale( image[,scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]] )

输入:

①image:输入图像

②scaleFactor:搜索窗口的缩放比例大小。

③minNeighbors:默认值为3,意味着有3个以上的检测标记存在时,才认为人脸存在。如果希望提高检测的准确率,可以将该值设置的更大,但同时可能会让一些人脸无法被检测到。小于该值的目标将被忽略。

④flags:该参数通常被省略。

⑤minSize:目标的最小尺寸,小于这个尺寸的目标将被忽略。

⑥maxSize:最大目标的尺寸。大于该值的目标将被忽略。

返回:

①objects:目标对象的矩形框组。

3 实践

  • 代码
import cv2
import matplotlib.pyplot as plt
import math
def dealImg(img):b, g, r = cv2.split(img)img_rgb = cv2.merge([r, g, b])return img_rgb
def dealImageResult(img_path):im = cv2.imread(img_path)img = im.copy()# 加载预训练的人脸级联分类器face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')eye_detector = cv2.CascadeClassifier('haarcascade_eye.xml')smile_detector = cv2.CascadeClassifier('haarcascade_smile.xml')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = face_detector.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=2, minSize=(125, 125))label = f'OpenCV  Haar Detected {str(len(faces))} faces'if len(faces) > 1:label = f'OpenCV  Haar Detected {str(len(faces))} faces'elif len(faces) == 1:label = f'OpenCV  Haar Detected {str(len(faces))} face'else:lable = " "cv2.putText(img, label, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 0), 2)for (x, y, w, h) in faces:# cv2.rectangle(img, (x, y), (x+w, y+h), (255, 255, 0), 1)# r = int(math.sqrt(w/2*w/2 + h/2*h/2))cv2.circle(img, (int(x+w/2), int(y+h/2)), int(h/2), (255, 255, 0), 2)# 人脸切分head = gray[y:y+h, x:x+w]h_temp = int(h*0.6)head_up = head[0:h_temp]head_down = head[h_temp:]# 检测眼睛eyes = eye_detector.detectMultiScale(head_up, scaleFactor=1.2, minNeighbors=3, minSize=(10, 10))for (ex, ey, ew, eh) in eyes:cv2.rectangle(img, pt1=(ex+x, ey+y), pt2=(ex+ew+x, ey+eh+y), color=[0, 255, 0], thickness=2)smile_result = smile_detector.detectMultiScale(head_down, scaleFactor=1.2, minNeighbors=3, minSize=(10, 10), maxSize=(80, 80))for mx, my, mw, mh in smile_result:cv2.rectangle(img, pt1=(mx+x, my+y+h_temp), pt2=(mx+mw+x, my+mh+y+h_temp), color=[255, 0, 0], thickness=2)fig = plt.figure(figsize=(10, 10))im = dealImg(im)img = dealImg(img)titles = ["img", "result"]images = [im, img]for i in range(2):plt.subplot(1, 2, i + 1), plt.imshow(images[i], "gray")plt.title("{}".format(titles[i]), fontsize=20, ha='center')plt.xticks([]), plt.yticks([])# plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.3, hspace=0)# plt.tight_layout()plt.show()fig.savefig('test_results.jpg', bbox_inches='tight')
if __name__ == '__main__':dealImageResult("test.jpeg")pass
  • 效果图

前文回顾

入门篇目录

 数字图像处理(入门篇)一 图像的数字化与表示

 数字图像处理(入门篇)二 颜色空间

 数字图像处理(入门篇)三 灰度化

 数字图像处理(入门篇)四 像素关系

 数字图像处理(入门篇)五 图像数据预处理之颜色空间转换

 数字图像处理(入门篇)六 图像数据预处理之坐标变化

 数字图像处理(入门篇)七 图像数据预处理之灰度变化

 数字图像处理(入门篇)八 图像数据预处理之直方图

 数字图像处理(入门篇)九 图像数据预处理之滤波

 数字图像处理(入门篇)十 边缘检测

 数字图像处理(入门篇)十一 形态学处理

 数字图像处理(入门篇)十二 自适应阈值分割

 数字图像处理(入门篇)十三 仿射变换

 数字图像处理(入门篇)十四 透视变换

实践篇目录

数字图像处理(实践篇)一 将图像中的指定目标用bBox框起来吧!

数字图像处理(实践篇)二 画出图像中目标的轮廓

数字图像处理(实践篇)三 将两张图像按照指定比例融合

数字图像处理(实践篇)四 图像拼接-基于SIFT特征点和RANSAC方法

数字图像处理(实践篇)五 使用Grabcut算法进行物体分割

数字图像处理(实践篇)六 利用hough变换进行直线检测

数字图像处理(实践篇)七 利用霍夫变换进行圆环检测

数字图像处理(实践篇)八 Harris角点检测

数字图像处理(实践篇)九 基于边缘的模板匹配

数字图像处理(实践篇)十 图像质量检测

数字图像处理(实践篇)十一 图像中的条形码解析

数字图像处理(实践篇)十二 基于小波变换的图像降噪

数字图像处理(实践篇)十三 数据增强之给图像添加噪声!

数字图像处理(实践篇)十四 图像金字塔

数字图像处理(实践篇)十五 基于傅里叶变换的高通滤波和低通滤波

数字图像处理(实践篇)十六 基于分水岭算法的图像分割

数字图像处理(实践篇)十七 Shi-Tomasi 角点检测

数字图像处理(实践篇)十八 人脸检测

数字图像处理(实践篇)十九 漫水填充
数字图像处理(实践篇)二十 人脸特征提取

数字图像处理(实践篇)二十一 人脸识别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215270.shtml

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

相关文章

【JVM从入门到实战】(二)字节码文件的组成

一、Java虚拟机的组成 二、字节码文件的组成 字节码文件的组成 – 应用场景 字节码文件的组成部分-Magic魔数 什么是魔数? Java字节码文件中的魔数 文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。…

机器学习笔记 - 随机样本共识(RANSAC) 算法

一、什么是 RANSAC? RANSAC(随机样本共识)是一种用于机器学习和计算机视觉的算法,随机样本共识(RANSAC)是一种迭代方法,用于根据包含异常值的数据集估计数学模型。RANSAC 算法的工作原理是识别数据集中的异常值,并使用不包含异常值的数据来估计所需的模型。 …

在Go中定义结构体

引言 围绕具体细节构建抽象是编程语言可以提供给开发人员的最好工具。结构体允许Go开发人员描述Go程序运行的世界。结构体允许我们讨论Address,而不是描述Street、 City或PostalCode的字符串。它们是我们努力告诉未来开发人员(包括我们自己)哪些数据对我们的Go程序是重要的,…

UE引擎 LandscapeGrass 实现机制分析(UE5.2)

前言 随着电脑和手机硬件性能越来越高,游戏越来越追求大世界,而大世界非常核心的一环是植被,目前UE5引擎提供给植被生成的主流两种方式为 手刷植被和LandscapeGrass(WeightMap程序化植被)。当然UE5.3推出新一代PCGFramework 节点程序化生成框…

MyBatis:缓存

MyBatis 缓存一级缓存二级缓存注 缓存 缓存,是数据交换的缓冲区(临时保存数据的地方)。即将数据(数据一般为频繁查询且不易改变)保存在计算机内存中,下次读取数据时直接从内存中获取,以避免频繁…

OpenAI接口调用示例

最近为公司做了一个ChatGPT工具,这里展示一下OpenAI接口的调用 前提条件 访问OpenAI官网(国内需要翻墙)的账号,需要sk 地址:https://platform.openai.com 依赖 使用开源工具调用OpenAI接口,依赖如下&am…

js中箭头函数简单介绍

1.箭头函数是 ES6 中新增的一种函数定义方式, 简单举例为 var nameA function(a){return a} 可以用箭头函数简化为 var nameA a >a; 返回的是你输入的值 比如 nameA(5) 返回的就是5 nameA(2) 返回的就是2 以上两个表达的含义是一样的。nameA为名字 2.…

Vue3封装一个轮播图组件

先看效果 编写组件代码 CarouselChart.vue <template><div classimg-box><el-button clickpreviousImages v-ifprops.showBtn>←</el-button><div classimg><div styledisplay: flex;gap: 20px idmove><imgclassimg-item v-for(item…

centos7部署docker

文章目录 &#xff08;1&#xff09;安装前准备&#xff08;2&#xff09;卸载旧版Docker&#xff08;3&#xff09;安装docker&#xff08;4&#xff09;配置镜像加速 &#xff08;1&#xff09;安装前准备 在开始安装之前&#xff0c;首先需要检查内核版本。使用 uname -r 命…

nodejs微信小程序+python+PHP个性化服装搭配系统APP-计算机毕业设计推荐 android

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

redis(设置密码)配置文件详细

1.设置账号密码端口 config set requirepass 123456 设置密码为123456 config get requirepass 查看账号密码 auth 123456 登入的时候输入这个确定账号密码 1. 首先连接到Redis服务器: redis-cli 2. 然后使用CONFIG SET命令设置requirepass参数并指定密码: CONFIG SET requi…

【PyTorch】现代卷积神经网络

文章目录 1. 理论介绍1.1. 深度卷积神经网络&#xff08;AlexNet&#xff09;1.1.1. 概述1.1.2. 模型设计 1.2. 使用块的网络&#xff08;VGG&#xff09;1.3. 网络中的网络&#xff08;NiN&#xff09;1.4. 含并行连结的网络&#xff08;GoogLeNet&#xff09; 2. 实例解析2.1…

家具制造ERP软件包含哪些功能?家具制造业ERP系统哪个好

不同的家具有不同的用料、品质、制造工时、营销渠道等&#xff0c;而有些家具制造企业采用传统的管理方式在处理物料BOM、生产实际成本核算、库存盘点、供应商选择、班组计件核对、生产领用以及物料追溯等方面存在不少提升空间。 与此同时也有很多的皮具制造企业借助ERP软件优…

Linux16 ftp文件服务区、vsftpd文件系统服务安装、lftp客户端安装、NFS远程共享存储

目录 一、FTP基础ftp主动模式ftp被动模式 二、vsftpd配置共享目录编辑配置文件使用windows 访问 三、客户端安装 &#xff08;lftp&#xff09;匿名用户的一些操作&#xff08;lftp {ip}&#xff09;ftp配置本地用户登录配置本地用户ftp配置文件 lftp操作 NFS远程共享存储安装n…

新的侧通道攻击可泄露处理器的 Root 密码

阿姆斯特丹自由大学的一组科学家开发了一种名为 SLAM&#xff08;Spectre Linear Address Masking&#xff09;的侧信道攻击。 该攻击利用旨在提高新型Intel、AMD 和 Arm 处理器安全性的硬件功能&#xff0c;从内核内存中提取根密码哈希。 重现 SLAM 攻击所需的代码和所有数据…

dockerfile:创建镜像的方式,船舰自定义的镜像

dockerfile&#xff1a;创建镜像的方式&#xff0c;船舰自定义的镜像 包括配置文件&#xff0c;挂载点&#xff0c;对外暴露的端口&#xff0c;设置环境变量 docker创建镜像的方式 1、基于已有镜像进行创建。 根据官方提供的镜像源&#xff0c;创建镜像&#xff0c;然后拉起…

IP与以太网的转发操作

TCP模块在执行连接、收发、断开等各阶段操作时&#xff0c;都需要委托IP模块将数据封装成包发送给通信对象。 网络中有路由器和集线器两种不同的转发设备&#xff0c;它们在传输网络包时有着各自的分工。 (1)路由器根据目标地址判断下一个路由器的位置 (2)集线器在子网中将网…

docker的镜像创建 dockerfile

dockerfile Dokcer镜像的创建 创建镜像有三种方法&#xff0c;分别为【基于已有镜像创建】、【基于本地模板创建】以及【基于Dockerfile创建】。 &#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改 docker run -itd --name web centos:7 /bin/bash …

k8s pod日志写入ELK的具体实现

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 在上一部分&#xff0c;shigen讲到了k8spod的日志写入ELK的三种技术方案&#xff0c;并在最后展示了一下我…

QMainWindow和QWidget有什么区别

2023年12月12日&#xff0c;周二上午 QMainWindow 和 QWidget 是 Qt 框架中两个不同的类&#xff0c;用于创建用户界面的窗口部件。它们之间的主要区别在于它们的设计和用途。 QMainWindow: QMainWindow 是用于创建主窗口的类&#xff0c;通常包含了一个应用程序的主要界面。…