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

pyplot.imshow与PIL.Image.show显示差异及预测图显示异常问题

问题原因与解决方案

核心问题是PIL调用前未对模型输出的预测张量做值域归一化,导致数值截断显示异常:

  • 你使用的生成模型输出的gen_image张量值域为[-1, 1],你在matplotlib的代码中提前执行了(gen_image + 1) / 2.0操作,将值域拉伸到了[0, 1],符合pyplot.imshow对浮点型图像输入的要求,因此显示正常。
  • PIL相关代码中直接使用原始值域的gen_image_convert乘255,负数部分在转换为np.uint8时会被强制截断为0,整体色阶完全偏移,因此显示异常。

修正后的PIL代码

import numpy as np
from PIL import Image

# 先执行和matplotlib一致的归一化操作,把值域拉到[0,1]
gen_image = (gen_image + 1) / 2.0
gen_image_convert = gen_image[0]
# 再乘255转换为无符号8位整数
image = Image.fromarray((gen_image_convert * 255).astype(np.uint8)).convert('RGB')
image.show()

如果修改后仍存在显示问题,可以额外检查张量的通道顺序:PyTorch等框架输出的张量默认是(通道数, 高度, 宽度)的CHW顺序,而PIL要求输入是(高度, 宽度, 通道数)的HWC顺序,如果是通道顺序问题,可在转换前添加维度交换操作:

# 适配CHW转HWC的场景
gen_image_convert = np.transpose(gen_image_convert, (1, 2, 0))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:09:05