使用Pillow的putdata方法转换灰度图为彩色时输出全黑
问题原因及修复方案
1. 图像模式与像素格式不匹配(最高发原因)
Pillow的putdata()方法严格要求传入的像素序列格式和Image对象的模式一一对应:
- 如果你的
newPic中每个元素是(R, G, B)三元组,img必须为RGB模式 - 如果你直接用打开灰度图得到的
L(单通道灰度)模式对象传入RGB三元组,参数会被异常解析,最终输出全黑图像
修复代码:
# 调用putdata前先转换图像模式 img = img.convert('RGB') img.putdata(newPic) img.save('tester.png')
2. 颜色值范围错误
如果你自定义的colors列表存储的是0~1区间的浮点型RGB数值,Pillow的RGB模式要求每个通道取值为0~255的整数,浮点值会被直接截断为0,导致全黑。
修复代码:
在赋值color时做数值转换:
if minNum == gs[i]: color = tuple(int(c * 255) for c in colors[i])
3. 快速验证方法
可输出参数确认匹配状态:
print("图像当前模式:", img.mode) print("newPic前5个像素样例:", newPic[:5])
内容的提问来源于stack exchange,提问作者Josh Coleman
相关产品推荐
相关产品推荐

