【问题】
color_map = [ 128, 64,128,
244, 35,232,
70, 70, 70,
153,153,153,
250,170, 30,
107,142, 35,
70,130,180,
220,20, 60,
255, 0, 0,
0, 0,142,
0, 0, 70,
0, 60,100,
0, 0, 90,
0, 0,110,
0, 0,230,
119, 11, 32] # cityscape中取了部分颜色值。16个颜色
print('color map len:',len(color_map))
# 打印label_mapping的values值集合。
print(np.unique(list(label_mapping.values())), len(set(list(label_mapping.values()))))
mask = convert_label(mask_data) # 替换部分id为训练集使用id
print('origin: ',np.unique(mask))
mask_mat = Image.fromarray(mask)
mask_mat.putpalette(color_map)
print('after putpattle: ',np.unique(np.array(mask_mat)))
# save_name 保存成为png图片
mask_mat.save(save_name)
print('read save result:',np.unique(np.array(Image.open(save_name))))
如图所示:16个类,,算上255是17个数值,颜色值的长度应该是16*3=48(这个长度在下方cityscape中是正确的)
此时putpalette函数赋值再保存,后将255更改为classid的最后一位。(尽管putpalette后值没变,但是保存时自动替换了。)
![](https://i-blog.csdnimg.cn/blog_migrate/43c2755ef477ff027de3223d01c01355.png)
【尝试解决,但不知道是否真的解决】
color_map = [ 128, 64,128,
244, 35,232,
70, 70, 70,
153,153,153,
250,170, 30,
107,142, 35,
70,130,180,
220,20, 60,
255, 0, 0,
0, 0,142,
0, 0, 70,
0, 60,100,
0, 0, 90,
0, 0,110,
0, 0,230,
119, 11, 32,# cityscape中取了部分颜色值
0, 0, 0] # 多加了一行,难道是给255一个黑色????
print('color map len:',len(color_map))
# 打印label_mapping的values值集合。
print(np.unique(list(label_mapping.values())), len(set(list(label_mapping.values()))))
mask = convert_label(mask_data) # 替换部分id为训练集使用id
print('origin: ',np.unique(mask))
mask_mat = Image.fromarray(mask)
mask_mat.putpalette(color_map)
print('after putpattle: ',np.unique(np.array(mask_mat)))
# save_name 保存成为png图片
mask_mat.save(save_name)
print('read save result:',np.unique(np.array(Image.open(save_name))))
还是16个类,但是将颜色值的长度改为(16+1)*3=51, 貌似得到解决。保存方式不变,和上方问题的修改之处只在于colormap的长度+1.
将mask_mat.putpalette(color_map)改行注释掉
# mask_mat.putpalette(color_map)
也可以得到下面的结果
![](https://i-blog.csdnimg.cn/blog_migrate/41c254221fdc44be7a44889de22e712f.png)
【cityscape】
color_map = [128, 64,128,
244, 35,232,
70, 70, 70,
102,102,156,
190,153,153,
153,153,153,
250,170, 30,
220,220, 0,
107,142, 35,
152,251,152,
70,130,180,
220, 20, 60,
255, 0, 0,
0, 0,142,
0, 0, 70,
0, 60,100,
0, 80,100,
0, 0,230,
119, 11, 32]# cityscape 19类颜色。
print('color map len:',len(color_map))
# 打印label_mapping的values值集合。
print(np.unique(list(label_mapping.values())), len(set(list(label_mapping.values()))))
mask = convert_label(mask_data) # 替换部分id为训练集使用id
print('origin: ',np.unique(mask))
mask_mat = Image.fromarray(mask)
mask_mat.putpalette(color_map)
print('after putpattle: ',np.unique(np.array(mask_mat)))
# save_name 保存成为png图片
mask_mat.save(save_name)
print('read save result:',np.unique(np.array(Image.open(save_name))))
当尝试用cityscape转换class为19类的代码进行转换时:
发现颜色值为19*3=57 即可正常运行,尽管算上255一共是20个类【这与我设定的颜色值和长度是一致的,不会给255颜色。只需要19个颜色即可。】。
一模一样的代码。只是更改了label替换的值和color map对应的长度,为什么就会出现上面的问题呢?
![](https://i-blog.csdnimg.cn/blog_migrate/7cf59700d6316ac084c2f095c08f1937.png)