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