如何使用Python将多个图片合并成一张图片

1. 简介

在计算机视觉领域,有时需要将多张图片合并成一张大图,例如制作数据集时需要把单张图片拼接成一张更大的图片,或者在展示图片时需要把多张图片合并在一起。本文将介绍使用Python实现将多个图片合并成一张图片的方法。

2. 准备工作

在进行图片合并之前,需要先准备好多张图片。为了方便演示,本文使用5张图片进行合并。这些图片可以保存在同一文件夹中,也可以使用Python代码读取图片。

2.1 Python读取图片

使用Python读取图片需要使用Pillow库。Pillow是Python Imaging Library的分支,可以用于图像处理和图像格式转换。

首先需要安装Pillow库,可以使用pip命令进行安装:

pip install Pillow

下面是读取单张图片的示例代码:

from PIL import Image

# 打开图片

img = Image.open("image.jpg")

# 显示图片

img.show()

2.2 Python合并图片

使用Python合并多个图片需要使用Image模块。Image模块提供了一些方法可以将多个图片合并到一张大图中。

下面是将两张图片横向合并的示例代码:

from PIL import Image

# 打开图片

img1 = Image.open("image1.jpg")

img2 = Image.open("image2.jpg")

# 计算合并后的图片大小

new_im = Image.new('RGB', (img1.width + img2.width, img1.height))

# 拼接图片

new_im.paste(img1, (0, 0))

new_im.paste(img2, (img1.width, 0))

# 显示合并后的图片

new_im.show()

使用以上代码可以将两张图片横向合并生成一张新的图片。

3. 将多个图片合并成一张图片

将多个图片合并成一张图片的方法大体上可以分为两种,一种是横向拼接,一种是纵向拼接。本文将介绍如何使用Python实现这两种方法。

3.1 横向拼接多张图片

横向拼接多张图片需要先计算出合并后的图片大小,然后将每张图片拼接到新图片的右侧即可。

下面是使用Python横向拼接多张图片的示例代码:

from PIL import Image

import os

# 图片文件夹路径

img_folder_path = "img_folder"

# 获取所有图片的路径

img_paths = [os.path.join(img_folder_path, f) for f in os.listdir(img_folder_path) if f.endswith(".jpg")]

# 打开并颠倒图片的顺序

images = [Image.open(i).transpose(Image.FLIP_LEFT_RIGHT) for i in img_paths[::-1]]

# 获取拼接后的图片大小

widths, heights = zip(*(i.size for i in images))

total_width = sum(widths)

max_height = max(heights)

# 拼接图片

new_im = Image.new('RGB', (total_width, max_height))

x_offset = 0

for im in images:

new_im.paste(im, (x_offset, 0))

x_offset += im.size[0]

# 显示合并后的图片

new_im.show()

以上代码中,首先读取所有图片的路径,然后打开图片并颠倒图片的顺序。然后计算合并后的图片大小,并创建一张新的图片用于保存拼接后的图片。接着循环所有图片,将每张图片拼接到新图片的右侧。最后显示合并后的图片。

3.2 纵向拼接多张图片

纵向拼接多张图片需要先计算出合并后的图片大小,然后将每张图片拼接到新图片的底部即可。

下面是使用Python纵向拼接多张图片的示例代码:

from PIL import Image

import os

# 图片文件夹路径

img_folder_path = "img_folder"

# 获取所有图片的路径

img_paths = [os.path.join(img_folder_path, f) for f in os.listdir(img_folder_path) if f.endswith(".jpg")]

# 打开图片

images = [Image.open(i) for i in img_paths]

# 获取拼接后的图片大小

widths, heights = zip(*(i.size for i in images))

max_width = max(widths)

total_height = sum(heights)

# 拼接图片

new_im = Image.new('RGB', (max_width, total_height))

y_offset = 0

for im in images:

new_im.paste(im, (0, y_offset))

y_offset += im.size[1]

# 显示合并后的图片

new_im.show()

以上代码中,首先读取所有图片的路径,然后打开所有图片。然后计算合并后的图片大小,并创建一张新的图片用于保存拼接后的图片。接着循环所有图片,将每张图片拼接到新图片的底部。最后显示合并后的图片。

4. 结论

本文介绍了使用Python将多个图片合并成一张图片的方法。通过学习本文,您可以掌握横向拼接和纵向拼接多张图片的方法,并了解使用Pillow库进行图片处理及图像格式转换的基础知识。

后端开发标签