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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:OpenCV——根据Haar级联数据进行动态人脸检测
下一篇:纯C实现Linux下的Shell

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月19日 04时26分32秒