OPenCV版本:4.4
IDE:VS2019
功能描述
对给定的矩阵应用进行水平连接。
函数垂直连接两个或更多的cv::Mat矩阵 (具有相同的行数)。
函数原型1
CV_EXPORTS void hconcat(const Mat* src, size_t nsrc, OutputArray dst);
参数描述
- @参数 src 输入矩阵或矩阵向量.所有的矩阵必须具有相同的行数和相同的深度。
- @参数 nsrc src中的矩阵个数.
- @参数 dst 输出矩阵.它和src具有相同的行数和深度。并且列数等于src列数总和.
- @参考
cv::vconcat(const Mat*, size_t, OutputArray),
cv::vconcat(InputArrayOfArrays, OutputArray)
cv::vconcat(InputArray, InputArray, OutputArray)
示例代码
cv::Mat matArray[] = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};
cv::Mat out;
cv::hconcat( matArray, 3, out );
//out:
//[1, 2, 3;
// 1, 2, 3;
// 1, 2, 3;
// 1, 2, 3]
函数原型2
CV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst);
参数描述
- 参数 src1 水平连接的第一个输入矩阵.
- 参数 src2 水平连接的第二个输入矩阵.
- 参数 dst 输出矩阵. 它和 src1 、src2具有相同的行数和深度,它的列数与src和src2的列数的总和相同。
示例代码
cv::Mat_<float> A = (cv::Mat_<float>(3, 2) << 1, 4,
2, 5,
3, 6);
cv::Mat_<float> B = (cv::Mat_<float>(3, 2) << 7, 10,
8, 11,
9, 12);
cv::Mat C;
cv::hconcat(A, B, C);
//C:
//[1, 4, 7, 10;
// 2, 5, 8, 11;
// 3, 6, 9, 12]
函数原型3
CV_EXPORTS_W void hconcat(InputArrayOfArrays src, OutputArray dst);
参数描述
-
参数 src 输入矩阵的数组. 所有的矩阵必须具有相同的列数和深度。
-
参数 ds t输出矩阵. 和src的行数和深度相同,列数等于src所有矩阵列数的总和.
示例代码
std::vector<cv::Mat> matrices = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};
cv::Mat out;
cv::hconcat( matrices, out );
//out:
//[1, 2, 3;
// 1, 2, 3;
// 1, 2, 3;
// 1, 2, 3]
源代码示例:
把两张图片水平连接成一张图片
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>
int main()
{
cv::Mat image = cv::imread("d:\\opencvtest\\images\\juice_small.png");
cv::Mat image2 = cv::imread("d:\\opencvtest\\images\\juice2_small.png");
cv::Mat output;
cv::hconcat(image, image2, output);
cv::imshow("hcontact", output);
cv::waitKey(0);
return 0;
}
原图1:
原图2:
运行结果图:
把多张图像水平连接成一张图片:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>
int main()
{
cv::Mat image = cv::imread("d:\\opencvtest\\images\\juice_small.png");
cv::Mat image2 = cv::imread("d:\\opencvtest\\images\\juice2_small.png");
std::vector<cv::Mat> images;
images.push_back(image);
images.push_back(image2);
images.push_back(image);
cv::Mat output2;
cv::hconcat(images, output2);
cv::imshow("hcontact2", output2);
cv::waitKey(0);
return 0;
}
运行结果: