使用Numpy asarray转换PIL灰度图后matplotlib显示偏绿色的问题咨询
问题根因
该问题既不是Numpy的转换/存储错误,也不是PIL读取逻辑的问题,是matplotlib的默认渲染配置导致的。
当plt.imshow()接收到单通道的二维灰度数组时,默认不会使用灰度配色,而是采用内置的viridis配色方案渲染,该配色以蓝绿色系为基础,就是你观察到的偏绿显示效果,数组本身存储的灰度数值完全正常。
修复方案
- 指定灰度配色参数
调用imshow时显式设置cmap参数为灰度模式即可:
若要完全匹配标准8位灰度图的映射规则,可额外指定数值范围:plt.imshow(npdata, cmap='gray')plt.imshow(npdata, cmap='gray', vmin=0, vmax=255) - (可选优化)强制转换输入图像为单通道灰度
部分PNG图像视觉上为灰度,但实际存储为三通道RGB或带透明通道的RGBA格式,可在打开图像后主动转换格式,避免后续处理异常:image = Image.open('disparity_SGBM_norm.png').convert('L')
验证方法
你可以将存储的npy文件读取后转回PIL图像直接保存,输出的图像为正常灰度,即可确认Numpy转换和存储环节完全正常:
import numpy as np from PIL import Image loaded_data = np.load("image.npy") recover_img = Image.fromarray(loaded_data) recover_img.save("recover_test.png")
内容的提问来源于stack exchange,提问作者John Adams
相关产品推荐
相关产品推荐

