首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haar级联分类器不能在简单的正面图像中检测人脸。

Haar级联分类器不能在简单的正面图像中检测人脸。
EN

Stack Overflow用户
提问于 2015-06-09 00:52:19
回答 2查看 6K关注 0票数 0

尝试用opencv + python做一些简单的人脸检测,使用Haar级联分类器。

下面的代码完美地检测到了image1image2中的面孔,但是在image3中却没有检测到

请帮助我理解image3中没有检测到面部的原因是什么。

代码语言:javascript
复制
import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

img = cv2.imread('/home/swiftguy/computer-vision/image3.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 3)
for (x,y,w,h) in faces:
    img2 = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
            cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-09 02:01:02

这主要是因为脸的亮度很高,孩子们的面部(主要是鼻梁周围)缺乏锐利的特征。人脸检测前的直方图均衡化可以提高像这样的图像的检测精度。

如果您的检测器需要很好地处理这些图像,一种可能是使用一组相似的图像来训练分类器。

票数 0
EN

Stack Overflow用户

发布于 2015-06-09 01:06:54

haar级联的工作原理是二值化的,如果你通过文档,它解释了人脸检测的整个过程,以供我附上样本图像作一个简单的介绍。

从图像中可以看到,灰度图像被处理以匹配预定义的模式,黑白框只分别表示较暗像素和较轻像素的像素密度,因此处理完全依赖于构成特定特征或图案的像素的亮度。

若要确定像素应视为黑色还是白色,则设置阈值。现在考虑第二张快照中右下角的图像,它使用了一个明显的事实,即眉毛比肤色更深,因此我们眼睛周围的区域可以简化为BWB(黑色白色黑),其中第一个B代表较深的左眉像素,W代表眉毛之间的肤色,最后一个B代表右侧眉毛,然而有许多这样的特征。

现在来看你的图像,图像的亮度更高了一点,还缺少了突出的黑色特征,例如:眉毛、嘴唇等。因此,构成haar特征的像素的亮度值有可能大于阈值,因此一些BWB特征可能看起来像WWW特征,因而无法满足给定图像中人脸的标准。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30721359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档