c++ - 使用 OpenCV、C++ 和 Image 2D 进行头部姿势估计 - 几何方法 - 滚动、偏航和俯仰

标签 c++ opencv geometric-arc euler-angles

我正在尝试根据 2D 图像找到人脸的三个角度 2D image .

我将 OpenCV 与 HaarCascade 结合使用来查找面部、眼睛、 Nose 和嘴巴。 但是我没有找到任何几何方法可以帮助我找到角度 X、Y 和 Z(Roll、Pitch 和 Yaw)。

谁能帮我展示一些可用的 C++ 或 Java 方法?

最佳答案

给定一张图片,没有其他信息,角度没有单一的解决方案。考虑一下 Yaw 的情况。投影到 2d 平面上时,可以看到眼睛之间的投影距离和眼睛相对于 Nose /嘴巴的位置发生了微小变化。然而,这个距离在人与人之间并不是恒定不变的。

解决此问题的一种典型方法是要求用户通过直视相机的标称“0”角度来“校准”他们的脸。此时,您现在有了引用长度,您可以将后续图像与之进行比较。

然而,长度仍然不是足够的信息,因为表观投影距离的变化量取决于光学器件和面部与相机的距离。您通常手动配置的光学器件;您可以通过假设“平均”面部尺寸并假设“标称”图像与这些尺寸完美匹配来估计的距离。如果您发现它高估或低估了特定面孔的旋转,您可以调整它。

一旦您具备所有这些假设,它就是相当简单的几何图形。您可以估计从眼睛通过 Nose 到嘴巴的直线的滚动。您可以测量眼睛之间的间距来估计偏航。最后,您可以使用眼睛/嘴巴或眼睛/ Nose 之间的间距来估计音高。请记住,当面部仍相当接近标称值时,这些假设最有效。

关于c++ - 使用 OpenCV、C++ 和 Image 2D 进行头部姿势估计 - 几何方法 - 滚动、偏航和俯仰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16401505/

相关文章:

c++ - 为什么我的程序不能处理大数?

python - 使用 OpenCV 在对象周围绘制轮廓

c++ - 在图像中查找相似(大)图案

c++ - RAII 多重构造函数

c++ - 巨大的 .cpp 文件比从文本文件中读取更好?

android - 是否可以更改 android 搜索栏的形状?

android - 在 android canvas 上绘制有角度的矩形/圆弧

raphael - 在 raphael js 中绘制中心弧

c++ - 如何在 C++ 中返回唯一所有权

java - Android 分水岭 OpenCV