user978029
user978029

Reputation: 83

Image transformation matrix in opencv

I'm currently working on this [opencv sample]

The interesting part is at line 89 warpPerspectiveRand method. I want to set the rotation angle, translation, scaling and other transformation values manually instead of using random generated values. But I don't know how to calculate the matrix elements.

A simple calculation example would be helpful. Thanks

Upvotes: 0

Views: 4558

Answers (2)

Mercury
Mercury

Reputation: 1965

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;

EDIT:

Rotation is always around (0,0). If you would like to rotated around a different point, you need to translate(move), rotate, and move back. It can be done by creating two matrices, one for rotation (A) and one for translation(T), and building a new Matrix M as:

M = inv(T) * A * T

Upvotes: 1

Sam
Sam

Reputation: 20058

What you're looking for is a projection matrix

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

There are different matrix styles, some of them are 4x4 (the complete theoretical projection matrix), some are 3x3 (as in OpenCV), because they consider the projection as a transform from a planar surface to another planar surface, and this constraint allows one to express the trasform by a 3x3 matrix.

Upvotes: 0

Related Questions