OpenCV中图像水平拼接函数hconcat的使用

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

运行结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值