昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 1205|回复: 0
收起左侧

使用OpenCV的函数hconcat()、vconcat()实现图像或矩阵的连接

[复制链接]

239

主题

241

帖子

931

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
931
昊虹君 发表于 2022-12-2 20:20 | 显示全部楼层 |阅读模式
使用OpenCV的函数hconcat()、vconcat()实现图像或矩阵的连接

函数hconcat()在水平方向上连接图像或矩阵;
函数vconcat()在垂直方向上连接图像或矩阵。

两个函数的原型和使用方法一模一样,所以在下面的函数原型介绍中,只介绍函数hconcat()的。

函数hconcat()的C++原型有三种,分别如下:
  1. void cv::hconcat(const Mat * src,
  2.                  size_t nsrc,
  3.                  OutputArray dst)
复制代码

上面这个原型中的参数nsrc表求src数组中的图像或矩阵个数。
  1. void cv::hconcat(InputArray src1,
  2.                  InputArray src2,
  3.                  OutputArray dst)
复制代码
  1. void cv::hconcat(InputArrayOfArrays src,
  2.                  OutputArray dst)
复制代码

函数hconcat()的Python原型只有一种,如下:
  1. dst=cv.hconcat(src[, dst])
复制代码

这两个函数的使用非常简单,大家看一看下面的示例代码就知道怎么使用了。

在C++的示例代码中,我把三种原型都用了一遍。

C++示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;


int main()
{

	cv::Mat A1 = (cv::Mat_<uchar>(2, 2) << 1, 2,
		3, 4);
	cout << "A1中的数据为:\n" << A1 << endl << endl;

	cv::Mat B1 = (cv::Mat_<uchar>(2, 2) << 5, 6,
		7, 8);
	cout << "B1中的数据为:\n" << B1 << endl << endl;

	cv::Mat A_B[2];
	A1.copyTo(A_B[0]);
	B1.copyTo(A_B[1]);
	cout << "A_B[0]中的数据为:\n" << A_B[0] << endl << endl;
	cout << "A_B[1]中的数据为:\n" << A_B[1] << endl << endl;

	cv::Mat C1;
	hconcat(A_B, 2, C1);
	cout << "C1中的数据为:\n" << C1 << endl << endl;

	cv::Mat C2;
	vconcat(A_B, 2, C2);
	cout << "C2中的数据为:\n" << C2 << endl << endl;

	//使用原型二进行水平方向和垂直方向上的拼接
	cv::Mat D1;
	hconcat(A1, B1, D1);
	cout << "D1中的数据为:\n" << D1 << endl << endl;

	cv::Mat D2;
	vconcat(A1, B1, D2);
	cout << "D2中的数据为:\n" << D2 << endl << endl;


	//使用原型三进行水平方向和垂直方向上的拼接
	std::vector<cv::Mat> matrices = { A1, B1};
	cv::Mat E1;
	hconcat(matrices, E1);
	cout << "E1中的数据为:\n" << E1 << endl << endl;

	cv::Mat E2;
	vconcat(matrices, E2);
	cout << "E2中的数据为:\n" << E2 << endl << endl;

	return(0);
}

C++示例代码运行结果如下:


因为Python原型只有一种,所以Python示例代码只有几行,
Python示例代码如下:
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术

# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询

# OpenCV的版本为4.4.0

import numpy as np
import cv2 as cv

if __name__ == '__main__':
    A1 = np.array([[1, 2],
                   [3, 4]], dtype='uint8')

    B1 = np.array([[5, 6],
                   [7, 8]], dtype='uint8')

    # Python-OpenCV中函数hconcat和vconcata只有一种原型
    C1 = cv.hconcat((A1, B1))
    C2 = cv.vconcat((A1, B1))

运行结果如下:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2024076726 )

GMT+8, 2024-5-16 14:46 , Processed in 0.025054 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表