在 OpenCV 中结合两个仿射变换矩阵
Combine two affine Transformations Matrices in OpenCV
我有两个 2x3 矩阵 A 和 B - 每个都用于仿射变换。
我需要将 A 和 B 组合成第三矩阵 C,它将 A 和 B 的仿射变换组合成一个矩阵。
我需要如何将它们相乘?
AB 还是 BA?
不同之处在于 A 或 B 被转置了,或者它有什么不同吗?
我读到一个进一步的解决方案是使用 3x3 矩阵并复制到前两行并且只使用结果中的前两行。但是如果它是 AB 或 BA.
则归结为同一个问题
此外,是否有一种简单的方法可以在 OpenCV 中实现这一点,或者我是否需要按照上述步骤实现每个步骤?
下面的函数结合了这两个矩阵:
Mat AffineTransform::concatenateMatrix(Mat first, Mat second){
Mat mul1 = Mat::eye(3, 3, CV_64F);
Mat mul2 = Mat::eye(3, 3, CV_64F);
Mat x_;
Mat temp_inv_;
Mat mul_r;
first.convertTo(temp_inv_, CV_64F);
second.convertTo(x_, CV_64F);
temp_inv_.row(0).copyTo(mul1.row(0));
temp_inv_.row(1).copyTo(mul1.row(1));
x_.row(1).copyTo(mul2.row(1));
x_.row(0).copyTo(mul2.row(0));
try{
mul_r = mul1*mul2;
}
catch (Exception& e){
const char* err_msg = e.what();
cout << err_msg;
}
mul1.release();
mul2.release();
temp_inv_.release();
return mul_r;
}
我有两个 2x3 矩阵 A 和 B - 每个都用于仿射变换。 我需要将 A 和 B 组合成第三矩阵 C,它将 A 和 B 的仿射变换组合成一个矩阵。
我需要如何将它们相乘?
AB 还是 BA?
不同之处在于 A 或 B 被转置了,或者它有什么不同吗?
我读到一个进一步的解决方案是使用 3x3 矩阵并复制到前两行并且只使用结果中的前两行。但是如果它是 AB 或 BA.
则归结为同一个问题此外,是否有一种简单的方法可以在 OpenCV 中实现这一点,或者我是否需要按照上述步骤实现每个步骤?
下面的函数结合了这两个矩阵:
Mat AffineTransform::concatenateMatrix(Mat first, Mat second){
Mat mul1 = Mat::eye(3, 3, CV_64F);
Mat mul2 = Mat::eye(3, 3, CV_64F);
Mat x_;
Mat temp_inv_;
Mat mul_r;
first.convertTo(temp_inv_, CV_64F);
second.convertTo(x_, CV_64F);
temp_inv_.row(0).copyTo(mul1.row(0));
temp_inv_.row(1).copyTo(mul1.row(1));
x_.row(1).copyTo(mul2.row(1));
x_.row(0).copyTo(mul2.row(0));
try{
mul_r = mul1*mul2;
}
catch (Exception& e){
const char* err_msg = e.what();
cout << err_msg;
}
mul1.release();
mul2.release();
temp_inv_.release();
return mul_r;
}