OpenCV 人脸检测-Haar Cascade 哈尔级联(1)_haarcascade_frontalface_alt-程序员宅基地

技术标签: python  OpenCV  计算机视觉  人脸识别  opencv  

目标:确定图片中人脸的位置,并画出矩形框。

1. 核心原理

1)使用Haar-like特征做检测

注意:特征值为白色矩形像素和减去黑色矩形像素和

2Integral Image : 积分图加速特征计算

3AdaBoost : 选择关键特征,进行人脸和非人脸分类

4Cascade : 级联,弱分类器成为强分类器

它提供了四个级联分类器(针对人脸的正面):

(1)haarcascade_frontalface_alt.xml (FA1):  22 stages and 20 x 20 haar features

(2)haarcascade_frontalface_alt2.xml (FA2): 20 stages and 20 x 20 haar features

(3)haarcascade_frontalface_alt_tree.xml (FAT):  47 stages and 20 x 20 haar features

(4)haarcascade_frontalface_default.xml (FD):  25 stages and 24 x 24 haar features

# 1 导入库
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 2 方法:显示图片
def show_iamge(image, title, pos):
    # BGR to RGB
    img_RGB = image[:,:,::-1]
    plt.subplot(1, 1, pos)
    plt.title(title)
    plt.imshow(img_RGB)
    plt.axis("off")  # 关闭坐标轴

# 3 方法:绘制图片中检测到的人脸
def plot_rectangle(image, faces):
    # 拿到检测到的人脸数据,返回4个值:坐标(x,y), 宽高width, height
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 3)
    return image

# 4 主函数
def main():
    #  5 读取一张图片
    image = cv2.imread("wedding photos.jpg")

    # 6 转换成灰度图片
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 7 通过OpenCV自带的方法cv2.CascadeClassifier()加载级联分类器
    face_alt2 = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")

    # 8 通过第7步,对图像中的人脸进行检测
    face_alt2_detect = face_alt2.detectMultiScale(gray)

    # 9 绘制图片中检测到的人脸
    face_alt2_result = plot_rectangle(image.copy(), face_alt2_detect)

    # 10 创建画布
    plt.figure(figsize=(9, 6))
    plt.suptitle("Face detection with Haar Cascade", fontsize=14, fontweight="bold")

    # 11 最终显示整个检测效果
    show_iamge(face_alt2_result, "face_alt2", 1)

    plt.show()
# 12 主程序入口
if __name__ == '__main__':
    main()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_66663399/article/details/122868241

智能推荐

简单的Android端新闻App的实现_安卓新闻app开发实例-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏50次。先上效果图:图一 : 图二: 总体思路概述:如图本app界面简单,图一的最顶端是安卓原生的标题栏,图二的最顶端是我自己定义的标题栏,具体代码后面再说。图一标题栏下面是五个TextView表示五个板块,再下面是Fragment+ViewPager的滑动页面,Fragment里面是Recyclerview控件,当滑动页面滑到相应版块时上面的相应的TextView会变成浅蓝色。当点击RecyclerView里的item时可以进入到图二:因为所用的api没有返回相应的内容信..._安卓新闻app开发实例

android mac 安装目录在哪个文件夹,Android Studio插件的源文件位置――mac端-程序员宅基地

文章浏览阅读2.6k次。Android Studio插件的源文件位置――mac端Android Studio中我们可以通过菜单栏的Android Studio --> preferences --> plugins来查看我们安装的插件。这里介绍下插件的实际安装位置。系统安装的插件在第一次安装as的时候,系统会为我们安装一堆插件,他们的位置位于/Applications/Android Studio.app/C..._/applications/android studio 2.app/contents/plugins/android/resources文件在

计算机打印共享服务,Windows 7系统快速设置共享打印机-程序员宅基地

文章浏览阅读781次。Windows 7系统快速设置共享打印机共享打印机共享打印是指打印机通过数据线连接某一台电脑(主机)设置共享后,局域网中的其他电脑(客户机)就可以使用此打印机。共享打印和共享文件相同,是Windows系统提供的一项服务,配置共享打印需要两台电脑能够相互访问。本资料适用于32位和32位系统或者64位和64位系统之间共享打印机,不适合32位和64位系统之间共享打印机,因为驱动不同无法快速连接,可以点击..._打印机共享服务

计算机蓝屏 代码0000a,win7电脑蓝屏代码显示0x0000001A的解决方法-程序员宅基地

文章浏览阅读2k次。这里为大家介绍的是解决win7电脑蓝屏代码显示0x0000001A的方法,在使用电脑的时候遇到蓝屏的问题想必已经是老生常谈了吧,不过对于出现蓝屏的原因有很多,每次出现蓝屏都会产生一个代码,只要知道了代码的含义就可以找到方法对症下药的解决这个蓝屏问题,现在就随小编来学习一下电脑蓝屏代码显示0x0000001A怎么解决吧。故障图:原因分析:这是内存管理错误,往往是由硬件引起的,比如新安装的硬件、内存本..._电脑蓝屏00000001a

QSS祛除QTreeView虚线框用法_qss treeview setstylesheet-程序员宅基地

文章浏览阅读2k次。祛除QTreeView的虚线框,主要在QSS中,用outline:none,用法:QTreeView{outline:none}。1.1下面是一个具体的应用用法:recoveryTreeView->setStyleSheet("QTreeView{background-color: transparent;color:white;font: bold 14px;outline:none;}"..._qss treeview setstylesheet

黑马程序员——java第二十二天:GUI_private button b什么意思-程序员宅基地

文章浏览阅读980次。------- android培训、java培训、期待与您交流! ----------GUIGUI——Graphical UserInterface(图形用户接口)。CLI——Command line UserInterface (命令行用户接口)就是常见的Dos命令行操作。 Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。 jav_private button b什么意思

随便推点

vue组件中使用elementUI样式(row-class-name)无效问题_label-class-name失效-程序员宅基地

文章浏览阅读1.6w次,点赞7次,收藏11次。问题描述vue项目中,需要给vue表格中的每一行加入自定义的样式,根据文档给<el-table>组件加上row-class-name属性即可,直接加入该属性并且在当前vue组件中配置对应class发现样式并没有生效。解决方案1.使用全局属性在elementUI中,row-class-name、row-style、cell-class-name等属性要想生效必须使用全局class..._label-class-name失效

linux性能优化-cpu使用率_linux 系统节拍率-程序员宅基地

文章浏览阅读1k次,点赞30次,收藏24次。当然,也可以用每一个场景的CPU 时间,除以总的 CPU 时间,计算出每个场景的CPU使用率。不是平均负载,也不是CPU上下文切换,而是另一个更直观的指标CPU使用率,CPU使用率是单位时间内CPU使用情况的统计,以百分比的方式展示。性能分析工具给出的都是间隔一段时间的平均CPU使用率,所以要注意间隔时间的设置,特别是用多个工具对比分析时,你一定要保证他们用的是相同的间隔时间。,是动态共享对象的类型。虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。_linux 系统节拍率

设置HTML中的checkbox默认为选中的状态_checkbox 默认勾选-程序员宅基地

文章浏览阅读1.2w次。<input type="checkbox" checked/> _checkbox 默认勾选

计算器界面布局JAVA_JAVA开发简易计算器界面-SWT-程序员宅基地

文章浏览阅读721次。大家好,我是成都[LD],博客四年前就申请了,一直没打理,最近正好有时间,遂萌生了写技术博客的念头。我不得不感慨现在新技术更新很快,一不小心,就感觉自身就Out了。记得一年前,当时我也是在51CTO上了解到NoSQL和Hadoop这样的信息,当时就简单觉得很新奇,没想到一年之后发展如此迅速~~当然我这样说,并不是叫大家去追寻新技术,最根本的还是基础打牢靠,休息的时候多去了解下最新的IT动态、学习下..._简易计算器布局java

Bootstrap fileinput插件使用的那些坑_fileinput.js 坑-程序员宅基地

文章浏览阅读7.8k次。最近找到了一个好用的文件上传插件,最主要的是兼容Bootstrap样式,这样对后天的开发人员来说就比较舒服了,但是在使用的时候遇到了一些问题,我把它记下来 一、文件加载顺序问题fileinput.js需要加载这个js。 在这个js加载之前先加载bootstrap.js,还有这个插件有中文zh.js需要在fileinput.js之后引入,还有css文件引入顺序也跟这个差不多。不然之后页面刷新可_fileinput.js 坑

访问权限修饰符详解(public,private,protected和friendly(默认))_访问权限修饰符有哪几种-程序员宅基地

文章浏览阅读3.2k次。访问权限修饰符详解(public,private,protected和friendly(默认))在Java语言中提供了多个作用域修饰符,其中常用的有public,private,protected,final,abstract,static,transient和volatile,这些修饰符有类修饰符,变量修饰符和方法修饰符。本文将只要介绍访问权限修饰符。在现实生活中,一个公司不同职位的职工,被分配的任务不同,所拥有的权力也不同。想要执行某一操作,必修要先得到执行该操作的权力。一般而言,这对对象也同样适用_访问权限修饰符有哪几种