我正在尝试从翻译、旋转、缩放、剪切等单个组件创建2D透视变换矩阵。但最终矩阵不能产生像下面的图像那样真正的透视效果。我认为我在编写创建矩阵的代码时漏掉了一些组件。有人能帮助我添加缺失的组件及其公式到下面的函数吗?我已经在我的代码中使用了OpenCV库。
cv::Mat getPerspMatrix2D( double rz, double s, double tx, double ty ,double shx, double shy)
{
cv::Mat R = (cv::Mat_<double>(3,3) <<
cos(rz), -sin(rz), 0,
sin(rz), cos(rz), 0,
0, 0, 1);
cv::Mat S = (cv::Mat_<double>(3,3) <<
s, 0, 0,
0, s, 0,
0, 0, 1);
cv::Mat Sh = (cv::Mat_<double>(3,3) <<
1, shx, 0,
shy, 1, 0,
0, 0, 1);
cv::Mat T = (cv::Mat_<double>(3,3) <<
1, 0, tx,
0, 1, ty,
0, 0, 1);
return T * Sh * S * R;
}