opencv中的图像变换矩阵

时间:2011-11-17 23:18:45

标签: opencv transformation perspective

我正在处理这个[opencv sample]

有趣的部分是第89行warpPerspectiveRand方法。我想手动设置旋转角度,平移,缩放和其他变换值,而不是使用随机生成的值。但我不知道如何计算矩阵元素。

一个简单的计算示例会有所帮助。 感谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您正在寻找的是投影矩阵

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

有不同的矩阵样式,其中一些是4x4(完整的理论投影矩阵),有些是3x3(如在OpenCV中),因为他们认为投影是从平面到另一个平面的变换,这个约束允许用3x3矩阵表示转换。