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

简介: OpenCV 4基础篇| OpenCV图像的拼接


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()


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()


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 来显示结果。
相关文章
|
2月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
523 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
3月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
55 4
|
3月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
2月前
|
计算机视觉 Python
Opencv学习笔记(四):如何通过cv2或者通过matplotlib来将多张图拼接成一张图输出
这篇文章介绍了如何使用OpenCV和matplotlib将多张图像拼接成一张图进行输出,并比较了两者的效果和使用注意事项。
99 0
Opencv学习笔记(四):如何通过cv2或者通过matplotlib来将多张图拼接成一张图输出
|
4月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
4月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
126 1
|
6月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
211 1
|
6月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
86 1
|
6月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
110 0
|
5月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。