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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:02:27