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

SegNet语义分割修改RGB调色板后输出颜色异常,求原因分析

问题原因分析与解决方案

这问题的核心是你在保存图像时多做了一步不必要的数值缩放,导致颜色值溢出了uint8的范围,从而出现异常。

具体原因:

你的调色板pascal_palette已经定义为dtype=np.uint8,里面的每个RGB值都是0-255的合法范围(比如草绿色(124,252,0)本身就是标准的RGB颜色值)。但在保存图像时,你执行了:

Image.fromarray(np.multiply(color_image,255)).save(out_file)

这会把每个颜色值乘以255,而uint8类型的数值最大值是255,超过的部分会被自动截断(取模256),导致颜色完全错乱:

  • 之前的(0,128,0)乘以255后,128*255=32640,32640 % 256 = 128,刚好和原值一致,所以看起来正常;
  • 但修改后的(124,252,0)乘以255后,得到的是(132,4,0)(因为124*255%256=132,252*255%256=4),这是偏红的暗色调,所以你看到图像变成红色。

解决方案:

直接去掉np.multiply(color_image,255)的操作,因为color_image已经是符合要求的uint8格式RGB图像了。修改保存代码为:

Image.fromarray(color_image).save(out_file)

另外可以额外检查两点确保万无一失:

  • 确认prediction的类别索引范围(0-12)和调色板的长度(13个元素)完全匹配;
  • 打印color_image的数值范围,确认是0-255之间的uint8值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:20