我正在处理这个[opencv sample]
有趣的部分是第89行warpPerspectiveRand方法。我想手动设置旋转角度,平移,缩放和其他变换值,而不是使用随机生成的值。但我不知道如何计算矩阵元素。
一个简单的计算示例会有所帮助。 感谢
答案 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矩阵表示转换。