You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python合并图片:将4张10x10图拼成20x20四象限图

解决方法:像素级拼接20x20图片

嘿,我懂你的需求啦——你要的不是用matplotlib展示四个子图,而是真正把4张10x10的图片从像素层面合并成一张20x20的单图,对吧?之前用subplots的方式只是创建了四个子图布局的画布,并不是真正的像素拼接,所以才不符合预期。

下面给你两种靠谱的实现方式,重点推荐第一种,这才是最直接的像素合并方法:

方法一:用Numpy直接拼接(最推荐)

图片本质就是数值数组,我们可以用Numpy的数组拼接函数直接把它们按四象限拼起来:

import numpy as np
from PIL import Image  # 用于图片读取/保存,也可以用matplotlib的imread

# 先把图片转成Numpy数组(假设image1~image4已经是数组,或者用下面的方式读取)
# image1 = np.array(Image.open("image1.png"))
# image2 = np.array(Image.open("image2.png"))
# image3 = np.array(Image.open("image3.png"))
# image4 = np.array(Image.open("image4.png"))

# 第一步:横向拼接每行的两张图(第一行是左上+右上,第二行是左下+右下)
top_row = np.hstack((image1, image3))
bottom_row = np.hstack((image2, image4))

# 第二步:纵向拼接两行,得到20x20的合并图
combined_image = np.vstack((top_row, bottom_row))

# 验证尺寸:输出应该是(20,20)(灰度图)或者(20,20,3)(RGB图)
print(combined_image.shape)

# 保存成图片
Image.fromarray(combined_image).save("combined_20x20.png")

# 或者用matplotlib显示(记得关掉坐标轴,看起来更像单图)
from matplotlib import pyplot as plt
plt.imshow(combined_image)
plt.axis('off')
plt.show()

方法二:用Matplotlib导出无间距的合并图(适合快速预览)

如果你一定要用Matplotlib来实现,可以通过调整子图间距、去掉边框等方式,让子图无缝拼接,再导出成图片:

from matplotlib import pyplot as plt

# 创建2x2子图,设置画布尺寸和dpi,保证导出后是20x20像素
f, ax = plt.subplots(2, 2, figsize=(2, 2), dpi=10)
plt.subplots_adjust(wspace=0, hspace=0)  # 去掉子图之间的所有间距

# 逐个添加图片,同时去掉坐标轴
ax[0,0].imshow(image1)
ax[0,0].axis('off')
ax[1,0].imshow(image2)
ax[1,0].axis('off')
ax[0,1].imshow(image3)
ax[0,1].axis('off')
ax[1,1].imshow(image4)
ax[1,1].axis('off')

# 导出成20x20像素的图片,去掉多余边距
plt.savefig("combined_20x20.png", bbox_inches='tight', pad_inches=0, dpi=10)
plt.show()

不过这种方式本质还是子图布局的导出,不如Numpy拼接来得直接和准确,更适合快速预览场景。

内容的提问来源于stack exchange,提问作者cohsta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:29:56