如何在opencv中将3个矩阵合并为1



我有三个矩阵,每个矩阵的大小为4x1。我想把所有这些矩阵复制到另一个大小为4x3的矩阵中,并称之为R。有聪明的方法吗?

您可以只使用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。

您可以使用

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()来连接矩阵。

对于那些在Python中使用OpenCv的人,如果您有数组ABC,并且希望数组D是其他数组的水平级联:

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

还有一种vconcat方法。

相关内容

  • 没有找到相关文章