OpenCV——根据Haar级联数据进行静态人脸检测
发布日期:2021-07-01 04:08:55
浏览次数:2
分类:技术文章
本文共 1270 字,大约阅读时间需要 4 分钟。
Haar级联
由于灯光、视角、视距、摄像头抖动以及数字噪声的变化,一个图像的细节可能会变得不稳定。但是人们在分类时却不会受这些物理细节方面差异的影响。因此,提取出图像的细节对产生稳定分类结果和跟踪结果很有用。即:从图像中提取特征。虽然任意像素都可能影响多个特征,但特征应该比像素数少得多。由此两个图像的相似程度可以通过它们对应特征的欧氏距离来度量。
类Haar特征是一种用于实现实时人脸跟踪的特征。每个类Haar特征都描述了相邻图像区域的对比模式。
对给定的图像,特征可能会因区域大小而有所不同,区域大小也可被称为窗口大小。但是,仅在尺度上不同的两幅图像也应该有相似的特征。因此,能为不同大小的窗口生成特征非常有用。这些特征集合称为级联。Haar级联具有尺度不变性,但是不具有旋转不变性。
Demo
下面这个示例程序的步骤为:
- 使用cv2.CascadeClassifier()函数加载Haar级联数据。
- 读取图像并转化为灰度。
- 使用detectMultiScale()函数获取人脸。
- 使用cv2.rectangle()函数在人脸上绘制矩形。
detectMultiScale()函数的两个重要参数:
- scaleFactor为每一个图像尺度中的尺度参数,默认值为1.1。scale_factor参数可以决定两个不同大小的窗口扫描之间有多大的跳跃,这个参数设置的大,则意味着计算会变快,但如果窗口错过了某个大小的人脸,则可能丢失物体。
- minNeighbors参数为每一个级联矩形应该保留的邻近个数,默认为3。minNeighbors控制着误检测,默认值为3表明至少有3次重叠检测,我们才认为人脸确实存在。
示例程序源代码:
# 静态图像中的人脸检测import cv2filename = 'vikings.jpg'def detect(filename): face_cascade = cv2.CascadeClassifier('cascades/haarcascade_frontalface_default.xml') img = cv2.imread(filename) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: img = cv2.rectangle(img, (x, y), (x + w, y + h), (0,255, 0), 2) cv2.namedWindow('Vikings Detected!!') cv2.imshow('Vikings Detected!!', img) cv2.imwrite('vikings_detected.jpg', img) cv2.waitKey(0)detect(filename)
运行结果:
附录
转载地址:https://mortal.blog.csdn.net/article/details/83277528 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月19日 04时26分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Ngrok内网穿透教程(国内地址)
2019-05-03
SpringBoot利用AOP防止请求重复提交
2019-05-03
Linux下安装Mysql5..7(Centos7)--亲测
2019-05-03
Linux下安装Nginx(Centos7)
2019-05-03
Linux下安装JDK(Centos7)
2019-05-03
SQL优化--大数据量模糊查询缓慢
2019-05-03
Linux安装Zookeeper(Centos7)
2019-05-03
ACM进阶计划(来自于南阳理工学院)
2019-05-03
Scala学习第八天 Scala主构造器、私有构造器、构造器重载实战详解
2019-05-03
Scala学习第九天 Scala的内部类实战详解
2019-05-03
Scala学习第十天 Scala单例对象、伴生对象实战详解
2019-05-03
Scala学习第十一天 Scala中的apply实战详解
2019-05-03
Scala学习第七天 Scala类的属性和对象私有字段实战详解
2019-05-03
Scala学习第六天 Map、Tuple、Zip实战解析
2019-05-03
Scala学习第四天 Scala的For与Function进阶实战、Lazy的使用
2019-05-03
Scala学习第三天 Tuple、Array、May与文件操作入门实战
2019-05-03
Scala学习第二天 Scala函数定义、流程控制、异常处理
2019-05-03
Scala学习第五天 Scala数组操作实战详解
2019-05-03
基于key-value的存储系统Redis
2019-05-03