2014-04-13 87 views

回答

10

您可以使用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()来连接矩阵。

+0

如果mat1是在循环中获得,我必须在矩阵R中断言,即如果循环3获得mat1的3倍值并且必须在矩阵4的R中断言,该怎么办? – user3528954

+0

@ user3528954您想在运行时确定'mat1'的大小吗? – herohuyongtao