Объединить две аффинные матрицы преобразований в OpenCV

У меня есть две матрицы 2×3 A и B — каждая для аффинного преобразования.
Мне нужно объединить A и B в тройную Матрицу C, которая объединит аффинное преобразование из A и B в одну Матрицу.

Как мне их умножить?

B или BА?

Разница в том, что либо А, либо В транспонируются, либо это вообще имеет значение?

Я прочитал еще одно решение — использовать матрицы 3х3 и скопировать в первые две строки и использовать только первые две строки в результате. Но это сводится к тому же вопросу, если этоB или BA.

Кроме того, есть ли простой способ реализовать это в OpenCV или мне нужно реализовать каждый шаг, как описано выше?

2

Решение

Следующая функция объединяет эти две матрицы:

  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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector