OpenCV中图像垂直拼接函数vconcat的使用

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;
}

运行结果:

在这里插入图片描述

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值