OpenCV——根据Haar级联数据进行动态人脸检测
发布日期:2021-07-01 04:08:56
浏览次数:3
分类:技术文章
本文共 1754 字,大约阅读时间需要 5 分钟。
Haar级联
由于灯光、视角、视距、摄像头抖动以及数字噪声的变化,一个图像的细节可能会变得不稳定。但是人们在分类时却不会受这些物理细节方面差异的影响。因此,提取出图像的细节对产生稳定分类结果和跟踪结果很有用。即:从图像中提取特征。虽然任意像素都可能影响多个特征,但特征应该比像素数少得多。由此两个图像的相似程度可以通过它们对应特征的欧氏距离来度量。
类Haar特征是一种用于实现实时人脸跟踪的特征。每个类Haar特征都描述了相邻图像区域的对比模式。
对给定的图像,特征可能会因区域大小而有所不同,区域大小也可被称为窗口大小。但是,仅在尺度上不同的两幅图像也应该有相似的特征。因此,能为不同大小的窗口生成特征非常有用。这些特征集合称为级联。Haar级联具有尺度不变性,但是不具有旋转不变性。
Demo
下面这个示例程序的步骤为:
- 使用cv2.CascadeClassifier()函数加载Haar级联数据。
- 使用cv2.VideoCapture()函数读取摄像头输入并转化为灰度。
- 使用detectMultiScale()函数获取人脸。
- 使用detectMultiScale()函数在人脸中获取眼睛。
- 使用cv2.rectangle()函数在人脸的眼睛上绘制矩形。
detectMultiScale()函数的两个重要参数:
- scaleFactor为每一个图像尺度中的尺度参数,默认值为1.1。scale_factor参数可以决定两个不同大小的窗口扫描之间有多大的跳跃,这个参数设置的大,则意味着计算会变快,但如果窗口错过了某个大小的人脸,则可能丢失物体。
- minNeighbors参数为每一个级联矩形应该保留的邻近个数,默认为3。minNeighbors控制着误检测,默认值为3表明至少有3次重叠检测,我们才认为人脸确实存在。
对于人眼的检测需要参数设置得更加精细。
示例程序源代码:
# 视频中的人脸检测import cv2def detect(): face_cascade = cv2.CascadeClassifier('cascades/haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('cascades/haarcascade_eye.xml') camera = cv2.VideoCapture(0) while True: ret, frame = camera.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) # 仅在检测到的人脸中进行眼睛检测 roi_gray = gray[x:x + w, y:y + h] eyes = eye_cascade.detectMultiScale(roi_gray, 1.03, 5, 0, (40, 40)) for (ex, ey, ew, eh) in eyes: cv2.rectangle(frame, (x+ex, y+ey), (x+ex + ew, y+ey + eh), (0, 0, 255), 2) cv2.imshow("camera", frame) if cv2.waitKey(10) & 0xff == ord("q"): break camera.release() cv2.destroyAllWindows()if __name__ == "__main__": detect()
附录
转载地址:https://mortal.blog.csdn.net/article/details/83277560 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月12日 08时12分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java并发编程(十一)-常用的并发工具类
2019-05-03
&#形式中文互转
2019-05-03
shell脚本中 EOF的意思
2019-05-03
mysql免密登录修改密码
2019-05-03
java并发编程(十二)- CAS(Compare And Swap)
2019-05-03
Git 常用命令笔记
2019-05-03
Springboot使用详解
2019-05-03
SHA-256 算法-java实现
2019-05-03
HTTPS配置说明文档(tomcat)
2019-05-03
关于java的模板方法设计模式
2019-05-03
java并发编程(十四)- 显示锁
2019-05-03
java并发编程(十三)- 显示锁使用Lock和Condition实现等待通知模式
2019-05-03
java并发编程(十五)-LockSupport工具类
2019-05-03
Spring源码分析(七) - bean的生命周期
2019-05-03
leetcode算法 111. 二叉树的最小深度
2019-05-03
李洪强iOS开发之-cocopods安装
2019-05-03
iOS开发基础知识--碎片30
2019-05-03
iOS开发基础知识--碎片31
2019-05-03
iOS开发基础知识--碎片32
2019-05-03