如何对齐面部图像c ++ opencv

Ont*_*BLW 18 c++ opencv face-recognition face-detection

我正在开发面部认证的C++应用程序.首先,我必须检测面部并预处理图像.

  1. 对于面部检测,我使用了HaarCascadeClassifier.问题是这个工具或这个算法给了我一个面部区域,由一个小大的矩形检测到,它可以吸收头发和一些背景.有没有解决方案来改变这个矩形的尺寸?我用了"frontalfacecascaadclassifier.xml".
  2. 对于面部预处理,我希望完全像这种技术进行面部对齐.我将如何实现这一目标?

byt*_*ish 18

在给定图像中找到眼睛的准确位置远非微不足道.用于在OpenCV中找到眼睛的Haar级联产生太多的假阳性是有用的,而且这种方法对于图像旋转不会很稳健(它可以补偿轻微的旋转,但我不知道训练图像).如果我是你,我会在http://scholar.google.com上开始广泛搜索该研究领域的相关论文.

您需要一个强大的头部姿势估计来对齐人脸图像.我自己做了一些研究,我认为共享算法和代码在这里很有用.我见过的最有趣的方法是:


Mar*_*ett 8

你不能再使用另一个哈尔分类器找到每只眼睛(眼睛很容易找到),然后假设这个人有两只眼睛,我们定义一个"水平"脸,意思是眼睛是水平的.

只需测量两只眼睛之间的角度,然后按该角度旋转图像即可.

angle = atan ( eye1.Y - eye2.Y ) / (eye1.X - eye2.X )
Run Code Online (Sandbox Code Playgroud)

  • @MartinBeckett是的,这就是http://www.bytefish.de/blog/aligning_face_images上的Python脚本.我认为问题在于找到眼睛的位置,这不是一件容易回答的问题. (2认同)

lig*_*ist 6

我尝试了Wild项目页面中Labeled Faces的以下面部对齐代码.它工作得很好,不需要检测面部特征点.C++代码可以从以下网址下载:http://vis-www.cs.umass.edu/faceAlignment/

如果您仍希望找到面部关键点,我发现Viola-Jones探测器不是非常稳健和准确.我个人建议使用Flandmark面部关键点检测器:http://cmp.felk.cvut.cz/~uricamic/flandmark/ ,它更加强大和准确.C代码可以从上面的网站下载.