OpenCV 4基础篇| OpenCV图像的拼接

news2024/11/15 15:47:15

目录

  • 1. Numpy (np.hstack,np.vstack)
    • 1.1 注意事项
    • 1.2 代码示例
  • 2. matplotlib
    • 2.1 注意事项
    • 2.2 代码示例
  • 3. 扩展示例:多张小图合并成一张大图
  • 4. 总结

1. Numpy (np.hstack,np.vstack)

语法结构:

retval = np.hstack(tup) # 水平拼接
retval = np.vstack(tup) # 垂直拼接
  • tup:一个包含多个数组的元组((img1, img2, …))。这些数组将被水平堆叠(即沿第二个轴拼接)。
  • retval:拼接后的图像,nparray 多维数组

1.1 注意事项

  • np.hstack() 按水平方向(列顺序)拼接 2个或多个图像,图像的高度(数组的行)必须相同。
  • np.vstack()按垂直方向(行顺序)拼接 2个或多个图像,图像的宽度(数组的列)必须相同。
  • 综合使用 np.hstack()np.vstack() 函数,可以实现图像的矩阵拼接。
  • np.hstack()np.vstack() 只是简单地将几张图像直接堆叠而连成一张图像,并未对图像进行特征提取和边缘处理,因而并不能实现图像的全景拼接。

1.2 代码示例

import cv2
import numpy as np

img = cv2.imread("./img/lena.jpg")
img = cv2.resize(img, None, fx=0.5, fy=0.5)    #为了完整显示,缩小一倍
blur2 = cv2.blur(img, (2,2))#模糊处理
blur3 = cv2.blur(img, (5,5))
blur4 = cv2.blur(img, (10,10))

htich = np.hstack((img,blur2))
htich2 = np.hstack((blur3,blur4))
vtich = np.vstack((htich, htich2))

cv2.imshow("mergedDemo", vtich)
cv2.waitKey(0)
cv2.destroyAllWindows()

1

2. matplotlib

2.1 注意事项

  • opencv使用的是BGR模式,而matplotlib使用的是RGB模式,所以需要将opencv中的BGR、GRAY格式转换为RGB,使matplotlib中能正常显示opencv的图像。

2.2 代码示例

import matplotlib.pyplot as plt
import cv2

imgFile = "./img/lena.jpg"
img1 = cv2.imread(imgFile, cv2.IMREAD_COLOR)
img2 = cv2.imread(imgFile, cv2.IMREAD_GRAYSCALE)
img3 = cv2.imread(imgFile, cv2.IMREAD_UNCHANGED)
img4 = cv2.imread(imgFile)
# 将opencv中的BGR、GRAY格式转换为RGB,使matplotlib中能正常显示opencv的图像
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img2, cv2.COLOR_GRAY2RGB)
img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2RGB)
img4 = cv2.cvtColor(img4, cv2.COLOR_BGR2RGB)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
plt.subplot(221), plt.title("img1"), plt.axis('off')
plt.imshow(img1)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
plt.subplot(222), plt.title("img2"), plt.axis('off')
plt.imshow(img2)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
plt.subplot(223), plt.title("img3"), plt.axis('off')
plt.imshow(img3)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
plt.subplot(224), plt.title("img4"), plt.axis('off')
plt.imshow(img4)
plt.show()

11

3. 扩展示例:多张小图合并成一张大图

import cv2  
import numpy as np  
  
# 图像文件路径列表  
image_paths = ['1.jpg', '2.jpg', '3.jpg', '4.jpg']  # 假设这是你的分块图像列表  
  
# 获取第一个图像的大小以确定整个大图的大小  
first_image = cv2.imread(image_paths[0])  
height, width = first_image.shape[:2]  
  
# 创建一个全黑的图像作为背景,大小与整个大图相同  
final_image = np.zeros((height, width, 3), dtype=np.uint8)  
  
# 循环遍历每个分块图像  
for image_path in image_paths:  
    chunk = cv2.imread(image_path)  
      
    # 提取分块图像的坐标  
    chunk_height, chunk_width = chunk.shape[:2]  
    start_i, start_j = image_path.split('_')[-2:]  
    start_i, start_j = int(start_i), int(start_j)  
      
    # 将分块图像写入到最终图像中  
    final_image[start_i:start_i+chunk_height, start_j:start_j+chunk_width] = chunk  
      
    # 释放分块图像占用的内存  
    del chunk  
  
# 保存最终合并的图像  
cv2.imwrite('final_image.jpg', final_image)

4. 总结

  • np.hstacknp.vstack 用于拼接数组,而 matplotlib 用于显示图像。
  • NumPy 的拼接操作通常比 matplotlib 更快,因为 matplotlib 的主要目的不是图像处理。
  • 可以先用 NumPy 进行图像拼接,然后用 matplotlib 来显示结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1486203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从嵌入式Linux到嵌入式Android

最近开始投入Android的怀抱。说来惭愧,08年就听说这东西,当时也有同事投入去看,因为恶心Java,始终对这玩意无感,没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业,所以只能回过头又来学。 首先还是…

考研数学——高数:微分方程

一、一阶线性微分方程 两种形式: 非齐次: 齐次: 推导过程 推导公式的过程一般由特殊到一般:所以先求解齐次方程的解 (然后对等式两边同时积分) 再来求非齐次方程的解,由…

基于springboot实现保险信息网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现保险信息网站系统演示 摘要 随着互联网的不断发展,现在人们获取最新资讯的主要途径来源于网上新闻,当下的网上信息宣传门户网站的发展十分的迅速。而保险产品,作为当下人们非常关注的一款能够给人们带来医疗、生活、养老或…

VUE3:省市区联级选择器

一、实现效果 二、代码展示 <template><div class"page"><select v-model"property.province"><option v-for"item in provinces" :key"item">{{ item }}</option></select><select v-model&…

python matplotlib figure-->限制elev旋转角度

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 当前限制的旋转范围是0-60 import pandas as pd import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D# 读取Excel文件中的空间坐标数据 df pd.read_excel(煤仓模拟参数.xl…

更改elementui的箭头图片以及位置

//更改箭头位置 .el-tree-node__content > .el-tree-node__expand-icon {position: absolute;right: 12px; }//更改箭头图片 .el-tree-node__expand-icon {transform: rotate(-90deg); } .el-tree-node__expand-icon.expanded {transform: rotate(0deg); } // 有子节点 且已…

C语言-指针(上)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 本篇文章将为大家介绍C语言中的核心内容-指针&#xff0c;指针在C语言的中知识内容比…

Ubuntu23.10禁用Wayland

禁用前 编辑custom.conf文件 sudo vim /etc/gdm3/custom.conf 去掉WaylandEnablefalse前的#号 保存退出 重启系统 生效: 成功转换为X11

软件设计师软考题目解析17 --每日五题

想说的话&#xff1a;要准备软考了。0.0&#xff0c;其实我是不想考的&#xff0c;但是吧&#xff0c;由于本人已经学完所有知识了&#xff0c;只是被学校的课程给锁在那里了&#xff0c;不然早找工作去了。寻思着反正也无聊&#xff0c;就考个证玩玩。 本人github地址&#xf…

吴恩达机器学习-可选实验室-梯度下降-Gradient Descent for Linear Regression

文章目录 目标工具问题陈述计算损失梯度下降总结执行梯度下降梯度下降法成本与梯度下降的迭代预测绘制祝贺 目标 在本实验中&#xff0c;你将:使用梯度下降自动化优化w和b的过程 工具 在本实验中&#xff0c;我们将使用: NumPy&#xff0c;一个流行的科学计算库Matplotlib&…

如何利用pynlpir进行中文分词并保留段落信息

一、引言 nlpir是由张华平博士开发的中文自然处理工具&#xff0c;可以对中文文本进行分词、聚类分析等&#xff0c;它既有在线的中文数据大数据语义智能分析平台&#xff0c;也有相关的python包pynlpir&#xff0c;其github的地址是&#xff1a; Pynlpir在Github上的地址 这…

【分块三维重建】【slam】LocalRF:逐步优化的局部辐射场鲁棒视图合成(CVPR 2023)

项目地址&#xff1a;https://localrf.github.io/ 题目&#xff1a;Progressively Optimized Local Radiance Fields for Robust View Synthesis 来源&#xff1a;KAIST、National Taiwan University、Meta 、University of Maryland, College Park 提示&#xff1a;文章用了s…

Linux设备模型(十一) - platform设备

一&#xff0c;platform device概述 在Linux2.6以后的设备驱动模型中&#xff0c;需关心总线、设备和驱动这3个实体&#xff0c;总线将设备和驱动绑定。在系统每注册一个设备的时候&#xff0c; 会寻找与之匹配的驱动&#xff1b;相反的&#xff0c;在系统每注册一个设备的时…

输出梯形 C语言

解析&#xff1a;这个输出图形的题就是一个找规律加数学计算&#xff0c;我们发现每行比上一行多两个*&#xff0c;最后一行的*表达式为h&#xff08;h-1&#xff09;*2&#xff0c;即3*h-2&#xff0c;那么每一行就是一个先输出最后一行&#xff0d;当前行*个数个空格&#xf…

【Godot4自学手册】第十九节敌人的血量显示及掉血特效

这一节&#xff0c;我主要学习敌人的血量显示、掉血显示和死亡效果。敌人的血量显示和主人公的血量显示有所不同&#xff0c;主要是在敌人头顶有个红色的血条&#xff0c;受到攻击敌人的血条会减少&#xff0c;并且有掉血数量的文字显示&#xff0c;效果如下&#xff1a; 一、…

详解动态规划(算法村第十九关青铜挑战)

不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finis…

QT Mingw32/64编译ffmpeg源码生成32/64bit库以及测试

文章目录 前言下载msys2ysamFFmpeg 搭建编译环境安装msys2安装QT Mingw编译器到msys环境中安装ysam测试 编译FFmpeg测试 前言 FFmpeg不像VLC有支持QT的库文件&#xff0c;它仅提供源码&#xff0c;需要使用者自行编译成对应的库&#xff0c;当使用QTFFmpeg实现播放视频以及视频…

【leetcode】用队列实现栈

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 点击查看题目 思路: 在做此题之前&#xff0c;我们先要实现队列&#xff0c;这在上个博客中已经写过&#…

算法43:动态规划专练(最长回文子串 力扣5题)---范围模型

之前写过一篇最长回文子序列的博客算法27&#xff1a;最长回文子序列长度&#xff08;力扣516题&#xff09;——样本模型 范围模型-CSDN博客 在那一篇博客中&#xff0c;回文是可以删除某些字符串组成的。比如&#xff1a; 字符串为&#xff1a;a1b3c4fdcdba&#xff0c; 那…

赵文彬将出席无磷锅炉工艺助剂在锅炉水节水节能应用

演讲嘉宾&#xff1a;赵文彬 集团副总/技术总监 上远未来水务集团有限公司 演讲题目&#xff1a;无磷锅炉工艺助剂在锅炉水节水节能方面的应用 会议简介 “十四五”规划中提出&#xff0c;提高工业、能源领城智能化与信息化融合&#xff0c;明确“低碳经济”新的战略目标&am…