[vconcat][hconcat]按行合并以及按列合并¶
OpenCV
提供了多种方式进行矩阵的合并
函数解析¶
主要函数包括
vconcat¶
CV_EXPORTS void vconcat(const Mat* src, size_t nsrc, OutputArray dst);
CV_EXPORTS void vconcat(InputArray src1, InputArray src2, OutputArray dst);
CV_EXPORTS_W void vconcat(InputArrayOfArrays src, OutputArray dst);
src
:输入矩阵的数组或向量。所有矩阵必须具有相同的列数和相同的深度nsrc
:src
中的矩阵数src2
:用于垂直连接的第二个输入数组dst
:输出数组
hconcat¶
CV_EXPORTS void hconcat(const Mat* src, size_t nsrc, OutputArray dst);
CV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst);
CV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst);
CV_EXPORTS_W void hconcat(InputArrayOfArrays src, OutputArray dst);
参数和vconcat
类似
示例¶
以下操作按行合并示例,按列合并操作类似
示例一¶
cv::Mat matArray[] = {cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)),
cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)),
cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),};
cv::Mat out;
cv::vconcat(matArray, 3, out);
cout << out << endl;
// out
[ 1, 1, 1, 1;
2, 2, 2, 2;
3, 3, 3, 3]
示例二¶
cv::Mat_<float> A = (cv::Mat_<float>(3, 2) << 1, 7, 2, 8, 3, 9);
cv::Mat_<float> B = (cv::Mat_<float>(3, 2) << 4, 10, 5, 11, 6, 12);
cv::Mat C;
cv::vconcat(A, B, C);
cout << C << endl;
// out
[1, 7;
2, 8;
3, 9;
4, 10;
5, 11;
6, 12]
示例三¶
std::vector<cv::Mat> matrices = {cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)),
cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)),
cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),};
cv::Mat out;
cv::vconcat(matrices, out);
cout << out << endl;
// out
[ 1, 1, 1, 1;
2, 2, 2, 2;
3, 3, 3, 3]