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

如何用NumPy将分块图像数组还原为单张图像数组?

解决图像分块重新合并的顺序问题

你的拆分逻辑是按行优先遍历分块:先遍历图像的行起始位置(x方向),再遍历列起始位置(y方向),所以tiles数组里的块顺序是:第一行的10个列块依次排列,接着是第二行的10个列块,以此类推。直接用reshape会因为numpy的行优先展开规则打乱块的排列,导致合并后的图像顺序错误。

方法一:分步拼接(直观易懂)

先将分块数组重塑为(10,10,549,549)的二维分块结构,再分别完成行内拼接和行间拼接:

import numpy as np

# 将tiles转为numpy数组,假设原tiles是列表形式
tiles_array = np.array(tiles)
# 重塑为10行×10列的分块结构
tiles_grid = tiles_array.reshape(10, 10, 549, 549)
# 拼接每一行的所有分块(沿列方向)
row_imgs = [np.concatenate(row_blocks, axis=1) for row_blocks in tiles_grid]
# 拼接所有行图像(沿行方向)
reconstructed_img = np.concatenate(row_imgs, axis=0)

# 验证结果形状
print(reconstructed_img.shape)  # 输出 (5490, 5490)

方法二:轴变换+Reshape(简洁高效)

通过调整数组轴的顺序,让分块的排列符合图像的行-列结构,再一次性reshape:

import numpy as np

tiles_array = np.array(tiles)
# 重塑为二维分块结构 → 调整轴顺序 → 直接reshape为原图尺寸
reconstructed_img = tiles_array.reshape(10,10,549,549).transpose(0,2,1,3).reshape(5490,5490)

轴变换说明:

  • 原reshape(10,10,549,549)的轴顺序是(行索引, 列索引, 块高度, 块宽度)
  • transpose(0,2,1,3)将轴调整为(行索引, 块高度, 列索引, 块宽度),此时数组的结构完全匹配原图的行-列排列,后续reshape就能保证顺序正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:24:31