2015-07-23 5 views
0

У меня проблема с выравниванием поверхностей с помощью 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; 
} 

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

+0

Выполняете ли вы обнаружение глаз до выравнивания и собираетесь найти соответствующую область после вращения или собираетесь ли вы выполнять обнаружение глаз ПОСЛЕ вращения? – Derman

+0

Я обнаруживаю, что глаза затем вращаются в зависимости от положения глаз ... после этого я хочу найти новое положение глаз, чтобы обрезать лицо – Tyranitar

ответ

0

Для вращающихся (против часовой стрелки на угол & thetas) точку (х, у) вокруг другой точки (р, д) необходимо использовать:

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

где х «у» координаты после вращения , В вашем случае (p, q) находится центр изображения, если вы повернули вокруг центра. Подробное объяснение можно найти здесь: https://math.stackexchange.com/questions/270194/how-to-find-the-vertices-angle-after-rotation

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

Смежные вопросы