用python-opencv实现简单的人脸检测(代码+理论知识)

2023-11-11

目录

1.理论知识

1)安装opencv

2)opencv人脸检测器

3) 加载人脸分类器

2.代码介绍

1)用摄影头调用图像

2)选择图片

 3.完整代码


1.理论知识

1)安装opencv

本文实现人脸目标检测的方法是opencv图像采集,因此我们也需先下载opencv的相关库

方法:pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com/pypi/simple

2)opencv人脸检测器

opencv中自带人脸检测器,是使用Haar算法进行人脸检测。大致介绍一下其原理,先生成一个矩形块,根据人脸的各个部位的明暗度,并要求眼睛、鼻梁、嘴等部位超过一定的阈值(PS中的知识)从而实现人脸检测,大致看图就清晰易懂。

3) 加载人脸分类器

# 创建一个级联分类器
haarcascade = cv2.CascadeClassifier('D:\\2\\haarcascade_frontalface_alt.xml')

但这个人脸分类器我试过只能达到正脸的效果,侧脸并不能进行检测出是人的效果

Haar的下载地址:https://github.com/opencv/opencv/tree/master/data

2.代码介绍

1)用摄影头调用图像

# 调用摄像头进行拍照
cap = cv2.VideoCapture(0)
ret, img = cap.read()
cap.release()

2)选择图片

本文运用图片进行目标检测

# 括号中的path为图像路径
img=cv2.imread(path)

检测图像中的人脸,返回人脸的相关向量组

faces = haarcascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)

scaleFactor参数:指图像尺寸每次减小的比例为1.3

minNeighbors参数:指每一个目标至少被检测5次才算真正的目标(像素在计算机里就是一个个格子,不同大小的图像框都能检测到人脸)


绘制矩形框:

# 对检测到的目标画框
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 1)

rectangle函数中参数的含义: 

img:处理的图像
(x,y),(x+w,y+h): 矩形框的左上和右下的坐标
(255,255,0): 颜色
1 : 线条的宽度

展示图像:

# 显示结果
cv2.imshow("Final_image", img)
cv2.waitKey(0)

结果显示(含侧脸检测失败图): 

 

 3.完整代码

import cv2

if __name__=="__main__":
    img = cv2.imread("D:\\2\\code\\datas\\test1.jpg")
    # 读取照片后转换成灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

    haarcascade = cv2.CascadeClassifier('D:\\2\\haarcascade_frontalface_alt.xml')

    # 识别图像中的人脸,返回所有人脸的矩形框向量组
    # scaleFactor 为了检测到不同大小的目标,通过scalefactor参数把图像长宽同时按照一定比例逐步缩小
    # 然后检测,这个参数设置的越大,计算速度越快,但可能会错过了某个大小的人脸。
    # minNeighbors 构成检测目标的相邻矩形的最小个数
    faces = haarcascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)

    # 对检测到的目标画框
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 1)
"""
#在img上绘制矩形
def draw(img, faces, color):
    for x1, y1, x2, y2 in faces:
        cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)

img1 = img.copy()
draw(img1, faces, (0, 255, 0))
"""
# 显示结果
cv2.imshow("Final_image", img)
cv2.waitKey(0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用python-opencv实现简单的人脸检测(代码+理论知识) 的相关文章

随机推荐

  • linux下使用ffmpeg录屏

    linux系统中 使用ffmpeg进行录屏与截图 把 dev fb0设备的framebuffer显示图像录制为视频 ffmpeg f fbdev framerate 10 i dev fb0 out avi 编码帧率默认值为25fps 把
  • Android查看应用签名方法

    查看keystore文件签名 查看keystore文件签名信息 前提要有keystore文件和密钥 才能够获取keystore文件的签名信息 打开 AS工具窗口栏右边的 Gradle gt Project gt app gt Tasks g
  • QtCreator设置多个qmake

    qt Creator 有时候需要设置不同qt库文件 也就是不同qmake 我们可以设置 1 Tools gt KIts 然后选择Manual gt add 然后添加Name写5 15或者其它名字 然后点击Qt Version gt Manu
  • PID算法(没办法完全理解的东西)

    快速 P 准确 I 稳定 D P Proportion 比例 就是输入偏差乘以一个常数 I Integral 积分 就是对输入偏差进行积分运算 D Derivative 微分 对输入偏差进行微分运算 输入偏差 读出的被控制对象的值 设定值
  • 24. 二叉搜索树的最近公共祖先

    题目链接 235 二叉搜索树的最近公共祖先 大概思路 题目要求 给定一颗二叉搜索树 两个确定值q p 要求q p的最近公共祖先 思路 利用搜索树的特性 当q p的值均小于遍历的节点值的时候 可以判断q p均在根节点的左子树上 小于则在右子树
  • DUKE大学BOE数据集 OCT图像积液分割数据集

    使用此数据集用来做积液分割研究 地址 http people duke edu sf59 Chiu BOE 2014 dataset htm 使用python将 mat转换为图片格式 对BOE MAT格式文件处理成图片 import cv2
  • 数据生成

    数据生成 MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成 目录 数据生成 MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成 生成效果 基本描述 模型描述 程序设计 参考资料 生成效果 基本描述 1 MATLAB实现MCMC马尔
  • java常见轮询算法

    轮询算法 轮询算法就是通过一个算法 对提供的一组列表进行计算 按照一定规则取出列表中的元素 常见的有顺序模式 随机模式 加权模式 加权平滑模式 定义轮询算法的接口 轮询算法接口 public interface Balance
  • 计费服务器不响应,按小时计费的服务器不开机会计费吗

    按小时计费的服务器不开机会计费吗 内容精选 换一换 按需付费是后付费方式 可以随时开通 删除弹性云服务器 支持秒级计费 系统会根据云服务器的实际使用情况每小时出账单 并从账户余额里扣款 按需付费的弹性云服务器关机再次开机时 可能会出现由于资
  • NMOS作为开关的两种接法

    NMOS作为开关的两种接法 1 左边电路负载是接在S极对地 如果R1很小且Q1 G极一直为High 那么流过Q1的电流可能将会非常大 MOS管容易烧 2 R1 I Us VGS Vg Vs 此时VGS不一定会大于Vgs th MOS会不完全
  • html抽奖概率,求一个可挑概率的html5抽奖 圆盘的

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼圆盘抽奖 margin 0 padding 0 elm1 height 40px background color a00 elm2 height 50px background color 0a
  • mysql库的安装

    编译文件时找不到mysql库 使用以下命令查看是否安装mysql库 dpkg l grep libmysqlclient dev 安装 sudo apt get install libmysqlclient dev 安装完成可以正常编译
  • Parallels Desktop 17 发布 针对M1大幅优化

    今天 Parallels 公司发布了 Parallels Desktop 17 它对 Windows 11 和 macOS Monterey 进行了适配优化 同时为基于Apple M1 和Intel 芯片的Mac进行图形 性能提升和生产力的
  • 【.NET8】访问私有成员新姿势UnsafeAccessor(上)

    前言 前几天在 NET性能优化群里面 有群友聊到了 NET8新增的一个特性 这个类叫 UnsafeAccessor 有很多群友都不知道这个特性是干嘛的 所以我就想写一篇文章来带大家了解一下这个特性 其实在很早之前我就有关注到这个特殊的特性
  • Windows 常用运行库下载 (DirectX、VC++、.Net Framework等)

    经常听到有朋友抱怨他的电脑运行软件或者游戏时提示缺少什么 d3dx9 xx dll 或 msvcp71 dll msvcr71 dll又或者是 Net Framework 初始化之类的错误而无法正常使用 其实很多时候 只是因为你的电脑没有安
  • kettle8 新插件开发 调试

    参考 https blog csdn net u013468915 article details 82629810 https blog csdn net zougen article details 80825751 基于eclipse
  • 【自然语言处理】大模型高效微调:PEFT 使用案例

    文章目录 一 PEFT介绍 二 PEFT 使用 2 1 PeftConfig 2 2 PeftModel 2 3 保存和加载模型 三 PEFT支持任务 3 1 Models support matrix 3 1 1 Causal Langu
  • 从新建项目到打包成APK(Cocos2d-x 2.2.1)

    好久没有更新Cocos2d x的学习文章了 最近在整理大学期间做过的东西 同时也新做了几个Cocos2d x的小程序 并且在网上搜索了不少资料 终于成功地打包成APK了 并在两个Android手机上成功运行 小for的环境是Windows8
  • DE-FAKE: Detection and Attribution ofFake Images Generated by Text-to-Image Generation Models

    一 文章信息 论文名称 DE FAKE Detection and Attribution of Fake Images Generated by Text to Image Generation Models 作者团队 二 主要创新 本文
  • 用python-opencv实现简单的人脸检测(代码+理论知识)

    目录 1 理论知识 1 安装opencv 2 opencv人脸检测器 3 加载人脸分类器 2 代码介绍 1 用摄影头调用图像 2 选择图片 3 完整代码 1 理论知识 1 安装opencv 本文实现人脸目标检测的方法是opencv图像采集