我有三个矩阵,每个矩阵的大小为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的人,如果您有数组A
、B
和C
,并且希望数组D
是其他数组的水平级联:
D = cv2.hconcat((A, B, C))
还有一种vconcat
方法。