1. vconcat函数介绍(竖向连接)
void cv::vconcat(const Mat * src, size_t nsrc, OutputArray dst )
src:Mat矩阵类型的数组。
nsrc:数组中 Mat 类型数据的个数。
dst:连接后的 Mat类矩阵。
该函数对存放在数组矩阵中的Mat 类型数据进行纵向连接。第一个参数是存放多个 Mat 类型数据的数组,要求数组中所有的 Mat 类型具有相同的列数并且具有相同的数据类型和通道数。第二个参数是数组中含有的 Mat 类型数据的个数。最后一个参数是拼接后输出的结果,结果的宽度与第一个 Mat 类型数据相同,高度为数组中所有 Mat 类型数据高度的总和,并且与第一个 Mat 类型数据具有相同的数据类型和通道数
void cv::vconcat(InputArray src1, InputArray src2, OutputArray dst )
src1:第一个需要连接的 Mat 类矩阵。
src2:第二个需要连接的 Mat 类矩阵,与第一个参数具有相同的宽度、数据类型和通道数。
dst:连接后的 Mat 类矩阵
该函数直接对两个
Mat
类型的数据进行竖向连接。前两个参数分别是需要连接的两个
Mat
类 型变量,两者需要具有相同的宽度、数据类型及通道数,第三个参数是连接后的输出结果,在拼接结果中第一个参数在上方,第二个参数在下方。
2. hconcat函数介绍(这里就说一下函数,意思跟上面函数一样的)横向连接
void cv::hconcat(const Mat * src, size_t nsrc, OutputArray dst )
void cv::hconcat(InputArray src1, InputArray src2, OutputArray dst )
3.代码示例
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
//矩阵数组的横竖连接
Mat matArray[] = { Mat(1, 2, CV_32FC1, cv::Scalar(1)),
Mat(1, 2, CV_32FC1, cv::Scalar(2)) };
Mat vout, hout;
cout << "matArray[0] == " << matArray[0] << "matArray[1] == " << matArray[1] << endl;
vconcat(matArray, 2, vout);
cout << "图像数组竖向连接:" << endl << vout << endl;
hconcat(matArray, 2, hout);
cout << "图像数组横向连接:" << endl << hout << endl;
//矩阵的横竖拼接
Mat A = (cv::Mat_<float>(2, 2) << 1, 7, 2, 8);
Mat B = (cv::Mat_<float>(2, 2) << 4, 10, 5, 11);
cout << "A : \n"<< A << "\nB : \n"<< B << endl;
Mat vC, hC;
vconcat(A, B, vC);
cout << "多个图像竖向连接:" << endl << vC << endl;
hconcat(A, B, hC);
cout << "多个图像横向连接:" << endl << hC << endl;
//读取 4 个子图像,00 表示左上角、01 表示右上角、10 表示左下角、11 表示右下角
Mat img00 = imread("lena00.png");
Mat img01 = imread("lena01.png");
Mat img10 = imread("lena10.png");
Mat img11 = imread("lena11.png");
if (img00.empty()||img01.empty()||img10.empty()||img11.empty())
{
cout << "请确认图像文件名称是否正确" << endl;
return -1;
}
//显示 4 个子图像
imshow("img00", img00);
imshow("img01", img01);
imshow("img10", img10);
imshow("img11", img11);
//图像连接
Mat img, img0, img1;
//图像横向连接
hconcat(img00, img01, img0);
hconcat(img10, img11, img1);
//横向连接结果再进行竖向连接
vconcat(img0, img1, img);
//显示连接图像的结果
imshow("img0", img0);
imshow("img1", img1);
imshow("img", img);
waitKey(0);
return 0;
}
4.结果: