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

如何用Python将12张图片拼接为4×3网格?寻求更优方案

将12张图片拼接为4×3网格的更优实现方法

你的当前代码只是把所有图片横向拼接成了一行,并没有实现4×3的网格布局。下面提供两种更高效、更简洁的实现方式:

方法一:用Numpy批量拼接(适合numpy数组格式的图片)

如果你的图片都是numpy数组(形状为(高度, 宽度, 通道数)),可以利用numpy的reshape和批量concatenate操作替代循环,效率更高:

import numpy as np

# 确保所有图片尺寸一致,exr_files_list是长度为12的numpy数组列表
# 将图片列表重塑为4行3列的结构,形状变为(4, 3, h, w, c)
grid_array = np.array(exr_files_list).reshape(4, 3, *exr_files_list[0].shape)

# 先横向拼接每行的3张图(axis=3对应宽度方向),得到4张行图,形状为(4, h, 3w, c)
row_stitched = np.concatenate(grid_array, axis=3)

# 再纵向拼接4张行图(axis=1对应高度方向),得到最终4×3网格,形状为(4h, 3w, c)
stitched_exrs = np.concatenate(row_stitched, axis=1)

这种方式避免了循环里的重复拼接操作,numpy的批量处理在性能上比循环更有优势,尤其是图片数量较多时。

方法二:用PIL库拼接(代码更简洁直观)

如果可以使用PIL库,代码会更易读,处理图片格式也更灵活:

from PIL import Image

# 假设exr_files_list是PIL Image对象列表,如果是numpy数组可先转换:Image.fromarray(img)
# 按4行3列分组
row_groups = [exr_files_list[i*3 : (i+1)*3] for i in range(4)]

# 横向拼接每行的3张图片
row_images = [Image.hconcat(group) for group in row_groups]

# 纵向拼接所有行,得到最终网格图
stitched_exrs = Image.vconcat(row_images)

# 如需转回numpy数组,可执行:np.array(stitched_exrs)

PIL的hconcat和vconcat方法直接封装了拼接逻辑,代码更简洁,还能自动处理图片尺寸(如果有尺寸不一致的情况,建议先统一缩放)。

内容的提问来源于stack exchange,提问作者Ahmad Uzzam Masood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:45:34