PIL加载RGB图像转NumPy数组时缺失3通道维度问题咨询
问题根因
- 目标PNG为索引色模式(PIL内对应模式码
P):该类图像存储时不直接保存每个像素的RGB三通道值,仅存储每个像素对应的调色板索引(单值),彩色显示依赖文件内置的调色板做映射。 Image.show()能正常展示彩色效果,是因为PIL渲染输出时会自动完成索引值到RGB颜色的映射,但直接对P模式的Image对象做NumPy数组转换时,仅会读取每个像素的索引值,因此得到的数组为(h, w)的二维结构,不存在三通道维度。
修复方法
转NumPy数组前,显式调用.convert('RGB')将图像转换为标准RGB三通道模式即可,修正后代码如下:
import numpy as np from PIL import Image Image.MAX_IMAGE_PIXELS = 233280000 png = Image.open('world.png') # 显式转换为标准RGB三通道模式 png = png.convert('RGB') png.show() png_arr = np.array(png) print(png_arr.shape)
执行后将输出符合预期的(图像高度, 图像宽度, 3)三通道数组结构。
补充:如果图像包含透明通道,可将转换参数替换为
RGBA,即调用.convert('RGBA'),转换后得到形状为(图像高度, 图像宽度, 4)的数组,第四维对应Alpha透明度通道。
内容的提问来源于stack exchange,提问作者Sean Mabli
相关产品推荐
相关产品推荐

