Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对齐面部图像c++;opencv 我正在开发一个C++应用程序,用于进行面部认证。首先,我必须检测人脸并对图像进行预处理 对于人脸检测,我使用了Haarcascade分类器。问题是,这个工具或者这个算法给了我一个面部区域,这个区域由一个稍微大一点的矩形检测出来,这个矩形突出头发和一些背景。有没有办法改变这个矩形的尺寸?我使用了“frontalfacecascaadclassifier.xml” 对于人脸预处理,我希望像这样进行人脸对齐。我将如何着手实现这一点_C++_Opencv_Face Detection_Face Recognition - Fatal编程技术网

如何对齐面部图像c++;opencv 我正在开发一个C++应用程序,用于进行面部认证。首先,我必须检测人脸并对图像进行预处理 对于人脸检测,我使用了Haarcascade分类器。问题是,这个工具或者这个算法给了我一个面部区域,这个区域由一个稍微大一点的矩形检测出来,这个矩形突出头发和一些背景。有没有办法改变这个矩形的尺寸?我使用了“frontalfacecascaadclassifier.xml” 对于人脸预处理,我希望像这样进行人脸对齐。我将如何着手实现这一点

如何对齐面部图像c++;opencv 我正在开发一个C++应用程序,用于进行面部认证。首先,我必须检测人脸并对图像进行预处理 对于人脸检测,我使用了Haarcascade分类器。问题是,这个工具或者这个算法给了我一个面部区域,这个区域由一个稍微大一点的矩形检测出来,这个矩形突出头发和一些背景。有没有办法改变这个矩形的尺寸?我使用了“frontalfacecascaadclassifier.xml” 对于人脸预处理,我希望像这样进行人脸对齐。我将如何着手实现这一点,c++,opencv,face-detection,face-recognition,C++,Opencv,Face Detection,Face Recognition,然后你不能用另一个Haar分类器来找到每只眼睛(眼睛很容易找到),然后假设这个人有两只眼睛,我们定义一个“水平”脸来表示眼睛是水平的 只需测量两眼之间的角度,然后将图像旋转该角度即可 angle = atan ( eye1.Y - eye2.Y ) / (eye1.X - eye2.X ) 在给定图像中找到眼睛的准确位置绝非易事。用于在OpenCV中查找眼睛的Haar级联产生了太多的假阳性,不太有用,而且这种方法对图像旋转不具有鲁棒性(它可能会补偿轻微的旋转,但我不知道训练图像)。如果我是你,

然后你不能用另一个Haar分类器来找到每只眼睛(眼睛很容易找到),然后假设这个人有两只眼睛,我们定义一个“水平”脸来表示眼睛是水平的

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

angle = atan ( eye1.Y - eye2.Y ) / (eye1.X - eye2.X )

在给定图像中找到眼睛的准确位置绝非易事。用于在OpenCV中查找眼睛的Haar级联产生了太多的假阳性,不太有用,而且这种方法对图像旋转不具有鲁棒性(它可能会补偿轻微的旋转,但我不知道训练图像)。如果我是你,我会开始广度优先搜索这个研究领域的相关论文

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

  • ,及。复杂图像的无监督联合对齐。国际计算机视觉会议(ICCV),2007年

  • 。2012年6月,罗德岛州普罗维登斯野生计算机视觉和模式识别(CVPR)中的人脸检测、姿势估计和地标定位


我在“野生项目”页面中的标签面上尝试了以下面对齐代码。它工作得非常好,不需要检测面部特征点。C++代码可以从:

下载
如果您仍然希望找到人脸关键点,我发现Viola-Jones检测器不是非常健壮和准确。我个人建议使用Flandmark面部关键点检测器:它更加健壮和准确。C代码可以从上述网站下载。

检测未对齐的人脸会使人脸识别变得困难。有时需要修复对齐,有时排除未正确对齐的对齐就足够了(例如,如果在视频流中检测人脸)。我采用了后一种方法,并训练了一个特殊的Haar级联,只检测正确对齐、光线充足的人脸。此处的详细信息:


如果你使用我的级联让我知道它如何为你工作。我很好奇别人会得到什么结果。它满足了我的需要。

看看CSIRO面部分析SDK(,)软件,它可以面部对齐,跟踪66个基准点。它速度快而且非常准确。

在搜索了一整天的算法来实现这一点后,我从谷歌切换到DuckDuckGo后,找到了Hemlata等人的“”。它支持倾斜角度大于45度的面


至于如何在代码中实现,这是我目前正在研究的另一个问题,但至少这是一个起点。

最先进的面部对齐方法必须是:

这是非常快速和有效的。你可以查看他们的项目网站

它们提供了一个易于使用的软件然而,核心部分代码,即监督下降法(SDM)并未发布,它只是简单的线性回归,易于实现

这里有一个演示,演示它可以处理倾斜的脸(为了隐私问题,请添加模糊并注意左上角的轴):

我在这里使用OpenCV和DLib实现了它:


任何倾斜的面都可以使用我的代码对齐

对于人脸身份验证,您可以使用或来执行此操作,这比现在的opencv更加方便和准确

至于dlib,可以在这里找到面对齐(C++代码)

或者这里(python代码)


名为的算法论文由dlib实现。

感谢您的回复,尤其是您的快速回复。是的,我同意您关于检测第一只眼睛的看法。但我不知道如何“定义一个“水平”脸来表示眼睛是水平的”.那是你定义的角度吗?真的,我怎么能有一张眼睛的脸position@louloulili-你说你已经在哈尔找到了那张脸,你只需要旋转它?我想有一个像这样的图像,但我发现一个像这样的图像,haar检测面的矩形很大。然后我将旋转它使其对齐。请帮助我,并提前感谢你的回答。@MartinBeckett是的,这就是Python脚本的作用。我认为问题是寻找眼睛的位置,这不是微不足道的回答。@ /你的Python脚本的BytFISH,当我正在开发一个C++应用程序时,我能检测眼睛位置,然后计算角度= Ang=AtAN(YOY1.Y-YON2.Y)/(YOR1.X-YEX2.X)然后使用这个角度进行仿射变换,得到类似于python脚本中得到的结果,并得到这样的图像?感谢您的帮助,我想继续这样一个方法,并获得这样一个图像,我有一个想法如何在c++中做到这一点,我在我的论文中使用它。我可以说它是我见过的最好的面部校准软件之一。它实时跟踪66个地标。请看这篇文章,了解更多细节“通过正则化均值漂移进行变形模型拟合”。该程序不适用于倾斜人脸的图像。它使用OpenCV人脸检测器检测人脸。您可以尝试使用其他用于倾斜面的人脸检测器初始化CSIRO跟踪器。但是,通常对于身份验证问题,您需要缩小范围