用于人脸识别的人脸对齐
face alignment for 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;
}
我想找到旋转后眼睛的新位置以根据眼睛中心裁剪面部。
要围绕另一个点 (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
因此,如果您将眼睛分割为某些区域,则需要对检测为眼睛的区域中的每个像素执行该操作。
我在使用 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;
}
我想找到旋转后眼睛的新位置以根据眼睛中心裁剪面部。
要围绕另一个点 (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
因此,如果您将眼睛分割为某些区域,则需要对检测为眼睛的区域中的每个像素执行该操作。