本文讲述的是一种人脸五官如眉毛,眼睛,鼻子,嘴巴的位置的初步检测,本文是从轮廓入手检测五官位置的。
在人脸区域中,眉毛,眼睛,鼻子,嘴巴周围的灰度特征与肤色的灰度特征有较大的不同,根据这个特点,即可以通过两次轮廓提取,一次阈值分割,一次取反操作最终锁定五官轮廓的位置。
第一步:灰度转换,取、Cb通道进行处理,在通过阈值分割,将灰度图转换为二值图像
第二步:进行轮廓提取,并排除小轮廓得到最大的轮廓所在区域即可认为是人脸区域,并且将其他区域的像素值置0
从图像中可以看出在人脸五官的位置周围的灰度置比设定的阈值要低(所以此种方法对阈值的设定要求要较为准确,否则会有误差,误检测处其他的地方)
第三步:在人脸区域内进行反操作,即将像素值为0的位置,像素值置255,像素值不为0的位置,像素值置0,这样可以初步保证在下次在取轮廓时可以找到五官所在位置
反操作后的效果图:
第四步:在上一步得到的图像中寻找轮廓,这里会有同学问,这样的话不就把人脸周围的白色区域的轮廓也找到了啊,确实会,所以我又进行了一个过滤,如果所得到的轮廓的矩形边和第二步检测到的人脸矩形边界重合的则认为不是五官部分,以为五官是在人脸区域内的,所以其轮廓范围不会与人脸区域有重合
最终找到的五官位置
这样就初步的检测到了五官位置
这个方法是基于灰度特征的,所以在复杂背景,以及如果阈值取的不当的情况下会产生误检测,漏检测,但是由于眼睛和眉毛处的灰度特征与周围相差较大,所以这两处的检测效果我认为还是不错的,如果童鞋们有建议或者有更好的方法欢迎讨论啊
Android studio人脸五官检测Android opencv人脸五官检测
样例图:
视频展示:
Android opencv人脸五官识别,Android studio编译
项目下载: