人脸姿态校正算法 附完整C++示例代码

在一些特殊情况下,经常需要依据图像中的人脸,对图片进行倾斜矫正。

 

例如拍照角度幅度过大之类的情况,而进行人工矫正确实很叫人头大。

那是不是可以有一种算法,可以根据人脸的信息对图片进行角度的修复呢?

答案肯定是确认的。

 

再次例如,想要通过人脸的特征对人物的表情和情绪进行精准判断,

那么这个时候如果能确保人脸没有发现严重倾斜,无疑对准确率判断有一定的帮助。

 

那么假如一张图片只有一个人脸,其实很好判断,通过眼睛的位置的坐标,根据两眼的直线角度,

就可以计算出修正的角度。

然后旋转图片到对应角度即可。

但是如果,一张图片存在多张人脸的时候该怎么办?

有两种方法:

1.找到最大的那个人脸,以它为基准

2.找到频次最高的人脸角度,以频次为基准

当然在大多数情况,方法1是比较合理的。

这两个种情况就留给各位看官去实现了。

本人仅仅考虑一张人脸的情况,演示如何实现该功能。

倾斜角度计算的代码如下:

float diffEyeX = right_eye_x - left_eye_x; float diffEyeY = right_eye_y - left_eye_y; float fAngle; float M_PI = 3.1415926535897932384626433832795f; if (fabs(diffEyeX) < 0.0000001f) fAngle = 0.f; else fAngle = atanf(diffEyeY / diffEyeX) * 180.0f / M_PI;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygfdj.html