如何在OpenCV中将3个矩阵合并成一个?

4

我有三个大小为4x1的矩阵。我想将所有这些矩阵复制到另一个大小为4x3的矩阵中,并将其称为R。有没有聪明的方法可以做到这一点?

3个回答

13

您可以使用hconcat进行水平连接。您可以针对每个矩阵使用它,例如hconcat(mat1, mat2, R),或者直接在向量或矩阵数组上应用它。

这是一个示例代码:

vector<Mat> matrices = {
    Mat(4, 1, CV_8UC1, Scalar(1)),
    Mat(4, 1, CV_8UC1, Scalar(2)),
    Mat(4, 1, CV_8UC1, Scalar(3)),
};
Mat R;
hconcat( matrices, R );
cout << R << endl;

这是结果:

[1, 2, 3;
  1, 2, 3;
  1, 2, 3;
  1, 2, 3]
Program ended with exit code: 1

同样地,如果您想垂直地完成此操作(按行堆叠),请使用vconcat。


4

您可以使用

Mat R(3, 4, CV_32F); // [3 rows x 4 cols] with float values
mat1.copyTo(R.row(0));
mat2.copyTo(R.row(1));
mat3.copyTo(R.row(2));

或者

Mat R(4, 3, CV_32F); // [4 rows x 3 cols] with float values
mat1.copyTo(R.col(0));
mat2.copyTo(R.col(1));
mat3.copyTo(R.col(2));

另外,正如@sub_o所建议的那样,您也可以使用hconcat()/vconcat()来连接矩阵。


如果在循环中获得mat1并且我必须在矩阵R中进行断言,即如果循环3次,我们会得到3次mat1的值,并且必须在4x3矩阵的R中进行断言。怎么办? - user3528954
@user3528954 你想在运行时确定 mat1 的大小吗? - herohuyongtao

0

对于在Python中使用OpenCv的人,如果你有数组ABC,并且想要一个数组D,它是其他数组的水平连接:

D = cv2.hconcat((A, B, C))

还有一个vconcat方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接