使用PIL加载单颜色PNG转numpy数组无法获取正确RGBA值怎么办
问题原因
返回('P',)代表图片为调色板(Palette)模式,这类单色调PNG为了压缩体积,不会直接存储每个像素的RGBA数值,仅在文件头保存用到的颜色集合(调色板),像素位置只存对应调色板的索引编号。直接将这类图片转为numpy数组时,得到的是索引值数组,而非实际颜色值,这就是得到全黑数值的原因。
解决方案
读取图片后主动转为RGBA模式即可,修改后的代码如下:
from PIL import Image import numpy as np # 注意原代码导入的image首字母需大写,否则会触发导入错误 red_image = Image.open("red.png").convert("RGBA") arr = np.asarray(red_image)
转换后得到的arr即为存储实际RGBA值的数组,纯红色单色调PNG对应的像素值就是[255, 0, 0, 255],符合预期。
如果有单独提取调色板的需求,也可以调用red_image.getpalette()方法获取调色板的颜色序列,自行根据索引映射得到颜色值,常规使用场景下直接调用convert转换模式即可。
内容的提问来源于stack exchange,提问作者J'e
相关产品推荐
相关产品推荐

