面部识别的面部对齐

时间:2015-07-23 11:39:06

标签: c++ opencv math face-detection face-recognition

我在使用opencv对齐面部时遇到问题。 我检测到脸部然后我使用flandmarks并计算旋转角度。我用这个函数来旋转图像:

cv::Mat rotate(cv::Mat src, double angle)
{
    cv::Mat dst;
    cv::Point2f pt(src.cols/2., src.rows/2.);
    cv::Mat r = getRotationMatrix2D(pt, angle, 1.0);
    cv::warpAffine(src, dst, r, cv::Size(src.cols, src.rows));
    return dst;
}

我希望在旋转后找到眼睛的新位置,根据眼睛中心裁剪脸部。

1 个答案:

答案 0 :(得分:0)

对于旋转(逆时针角度θ),需要使用的另一个点(p,q)周围的点(x,y):

x′ = (x−p)cos(θ)−(y−q)sin(θ)+p,
y′ = (x−p)sin(θ)+(y−q)cos(θ)+q.

其中x',y'是旋转后的坐标。 在您的情况下,如果围绕中心旋转,(p,q)是图像的中心。 详细说明可在此处找到:https://math.stackexchange.com/questions/270194/how-to-find-the-vertices-angle-after-rotation

因此,如果您将眼睛分割为某些区域,则需要对检测为眼睛的区域的每个像素执行该操作。