使用numpy hstack合并图像时遇数组维度不匹配错误求助
解决np.hstack维度不匹配错误
错误原因
你遇到的ValueError: all the input arrays must have same number of dimensions,核心问题是待拼接的两张图片维度不一致:
- 部分图片是灰度图,转换成数组后是2维结构(形状为
(256,256)) - 另一部分是彩色图,转换成数组后是3维结构(形状为
(256,256,3))
虽然第一步代码统一了图片的宽高尺寸,但没有统一通道数,导致np.hstack无法完成拼接操作。
解决方案
方案1:预处理时统一所有图片为3通道
在第一步调整尺寸的代码中,把灰度图扩展为3通道(模拟彩色图格式):
import glob import numpy as np from skimage import io, transform, util filenames = glob('data/*.png') for filename in filenames: im = io.imread(filename) # 将灰度图(2维)转为3通道格式 if im.ndim == 2: im = np.stack([im]*3, axis=-1) im = transform.resize(im, (256, 256), anti_aliasing=True) im = util.img_as_ubyte(im) io.imsave(filename, im)
方案2:拼接前临时统一通道数
如果不想修改原始图片,可在拼接代码中实时处理通道差异:
import glob import numpy as np from PIL import Image from tqdm import tqdm filenames = sorted(glob('data/pic_f.*.png')) k = 0 target_size = (256, 256) # 第一步已统一尺寸,直接复用 for filename in tqdm(filenames): # 获取配对图片路径 img_paths = [filename, filename.replace('_f', '_r')] processed_arrays = [] for path in img_paths: img = Image.open(path).resize(target_size) arr = np.asarray(img) # 灰度图转3通道 if arr.ndim == 2: arr = np.stack([arr]*3, axis=-1) processed_arrays.append(arr) # 执行拼接并保存 imgs_comb = np.hstack(processed_arrays) Image.fromarray(imgs_comb).save(f'data/mugshot_comp.{k}.png') k += 1
内容的提问来源于stack exchange,提问作者osterburg
相关产品推荐
相关产品推荐

