Матрица преобразования изображений в opencv - PullRequest
0 голосов
/ 18 ноября 2011

Я сейчас работаю над этим [opencv sample]

Интересная часть находится в строке 89 метода warpPerspectiveRand.Я хочу установить угол поворота, перемещение, масштабирование и другие значения преобразования вручную вместо использования случайных значений.Но я не знаю, как рассчитать матричные элементы.

Был бы полезен простой пример расчета.Спасибо

Ответы [ 2 ]

1 голос
/ 07 февраля 2012
double ang = 0.1;    
double xscale = 1.2;    
double yscale = 1.5;    
double xTranslation = 100;    
double yTranslation = 200;

cv::Mat t(3,3,CV_64F);
t=0;

t.at<double>(0,0) = xscale*cos(ang);    
t.at<double>(1,1) = yscale*cos(ang); 

t.at<double>(0,1) = -sin(ang);    
t.at<double>(1,0) = sin(ang);


t.at<double>(0,2) = xTranslation ;    
t.at<double>(1,2) = yTranslation;

t.at<double>(2,2) = 1;

РЕДАКТИРОВАТЬ:

Вращение всегда вокруг (0,0).Если вы хотите вращаться вокруг другой точки, вам нужно перевести (переместить), повернуть и вернуться назад.Это можно сделать, создав две матрицы, одну для вращения (A) и одну для перевода (T), и построив новую матрицу M как:

M = inv(T) * A * T
0 голосов
/ 18 ноября 2011

То, что вы ищете, это матрица проекции

http://en.wikipedia.org/wiki/3D_projection

Существуют разные стили матрицы, некоторые из них 4x4 (полная теоретическая матрица проекции), некоторые 3x3 (как в OpenCV), потому что они рассматривают проекцию как преобразование от плоской поверхности к другой плоской поверхности, и это ограничение позволяет выразить трансформацию с помощью матрицы 3x3.

...