我正在尝试基于2D图像找到一个人脸的三个角度,使用OpenCV和HaarCascade来查找脸部、眼睛、鼻子和嘴巴。但我没有找到可以帮助我找到X、Y和Z(横滚、俯仰和偏航)角度的任何几何方法。请问是否有人可以提供一些在C++或Java中有效的方法?
所以,您想根据鼻子、眼睛和嘴的位置来确定面部的方向(用RPY角度表示)。假设这三个(四个-两只眼睛)都是可见的,我会使用脸部的对称特征来确定头部的方向,例如:
可以使用眼睛之间的一条线作为一个轴的参考(例如俯仰角)。然后,我们可以假设滚转轴指向鼻子的方向-可以通过鼻子到眼睛中点的位置位移来测量。最后,偏航角可以通过眼睛中点、鼻子位置和嘴巴位置之间的距离关系来测量。
我不知道这四个感兴趣的点之间的距离关系,它们可能因性别、年龄和出生地而异。但是,如果您能找到这样的关系,那么角度的推导在数学上应该相当简单。
顺便说一下,这是一个有趣的应用!
Value = (right eye Y / 2) - (left eye Y / 2)
有了这些信息,您可以纠正图像并继续处理(要旋转图像,请查找创建2D旋转矩阵并使用warp affine的方法)
如果这有点过时,我很抱歉,但我发现上述方法非常成功,希望能帮助到某些人