выравнивание лиц для распознавания лиц

У меня проблема с выравниванием лиц с помощью opencv. Я обнаруживаю лицо, затем использую метки и вычисляю угол поворота. Я использую эту функцию для поворота изображения:

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;
}

Я хочу найти новое положение глаз после поворота, чтобы обрезать лицо по центру глаз.


person Tyranitar    schedule 23.07.2015    source источник
comment
Вы выполняете обнаружение глаз ПЕРЕД выравниванием и собираетесь найти соответствующую область после поворота, или вы собираетесь просто выполнять обнаружение глаз ПОСЛЕ поворота?   -  person Derman    schedule 23.07.2015
comment
Я обнаруживаю глаза, затем вращаюсь в зависимости от положения глаз ... после этого я хочу найти новое положение глаз, чтобы обрезать лицо   -  person Tyranitar    schedule 23.07.2015


Ответы (1)


Для поворота (против часовой стрелки на угол θ) точки (x, y) вокруг другой точки (p, q) вам необходимо использовать:

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.

Поэтому, если у вас есть глаза, сегментированные как некоторые области, вам необходимо выполнить эту операцию с каждым пикселем из области, определенной как глаза.

person Springfield762    schedule 23.07.2015