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

PIL图像预处理后输出形状(1,254,254,1)与预期(1,254,254,3)不符

问题根因

  • 你输入的PIL图像mode=L属于灰度单通道图像,转换为numpy数组后默认只有1个通道,因此经过预处理后最后一维维度为1,和预期的3通道不符。
  • 项目外单独运行正常是因为测试时输入的是RGB模式的3通道图像,和项目内前端传入的灰度图像输入源不一致。

修复方案

首先在预处理第一步统一将输入的PIL图像转换为RGB模式,确保后续处理的都是3通道数据,修改后代码如下:

def preprocess(img):
    # 新增:统一将PIL图像转为RGB模式,兼容灰度图输入
    img = img.convert('RGB')
    img = np.array(img)
    resized = cv2.resize(img, (254, 254))
    img = tf.keras.preprocessing.image.img_to_array(resized)/255
    img = np.array([img])
    
    return img

如果不想改动PIL层面的处理,也可以在numpy数组转换后手动扩展通道,将单通道复制为3通道:

def preprocess(img):
    img = np.array(img)
    resized = cv2.resize(img, (254, 254))
    # 新增:单通道转3通道
    if len(resized.shape) == 2 or resized.shape[-1] == 1:
        resized = cv2.cvtColor(resized, cv2.COLOR_GRAY2RGB)
    img = tf.keras.preprocessing.image.img_to_array(resized)/255
    img = np.array([img])
    
    return img

验证方式

可以在预处理函数入口添加日志打印img.mode,确认项目内调用时传入的图像模式是否为L,即可定位输入差异问题。

内容的提问来源于stack exchange,提问作者Hamza.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:18:00