在 OpenCV 中组合两个仿射变换矩阵

Kev*_*n91 6 c++ opencv matrix affinetransform

我有两个 2x3 矩阵 A 和 B - 每个矩阵都用于仿射变换。我需要将 A 和 B 组合成第三个矩阵 C,它将把 A 和 B 的仿射变换组合成一个矩阵。

我需要如何将它们相乘?

A B 还是 B A ?

区别在于 A 或 B 被调换了还是根本没有任何区别?

我读到另一个解决方案是使用 3x3 矩阵并复制到前两行中,并且只使用结果中的前两行。但它归结为同样的问题,如果它是 A B 或 B A。

此外,是否有一种简单的方法可以在 OpenCV 中实现这一点,或者我是否需要实现上述每个步骤?

Kev*_*n91 4

以下函数组合了这两个矩阵:

  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;
}
Run Code Online (Sandbox Code Playgroud)