2014-04-13 68 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