语义分割标签读取

(本篇文章转载自这里)上篇博客对语义分割数据集进行Copy-Paste数据增强(点我访问),其中涉及到对mask文件的读写,踩了一些坑,在这里记录一下相关知识点。

目录

一、灰度模式与调色板模式

二、两种模式对应的读写方法

三、语义分割mask可视化


一、灰度模式与调色板模式

我们标注好的文件,或者通过模型预测出的结果,通常保存为.png格式的图片。不同于RGB图像,其保存的位数为8位,或是灰度图、或是调色板图;

在PIL格式中,我们通过查看其mode属性,能够发现其区别。

我们使用VOC2012中的两个mask图片:'2007_000032.png'、'2007_000033.png',其样式分别为:

 其mode属性分别为:

from PIL import Image
 
print(Image.open('2007_000032.png').mode)  # L
print(Image.open('2007_000033.png').mode)  # P

二、两种模式对应的读写方法

之所以其mode属性不同(一个是L,代表灰度模式,另一个是P,代表调色板模式),是因为对分割好的mask文件保存时的方式不同。对于灰度模式,直接使用cv2.imwrite()函数进行保存即可,只不过读取时,需要按照灰度图的方式读取|(用OpenCV或者PIL格式均可以):

# 方式一:
label = cv2.imread(label_path, 0)
 
# 方式二:
label = np.asarray(Image.open(label_path), dtype=np.int32)

而对于调色板模式,其保存方式如下:

def save_colored_mask(mask, save_path):
    lbl_pil = Image.fromarray(mask.astype(np.uint8), mode="P")
    colormap = imgviz.label_colormap()
    lbl_pil.putpalette(colormap.flatten())
    lbl_pil.save(save_path)

如上,需要先将array格式的mask转为PIL.Image格式,然后,使用imgviz中的Label colormap给mask添加调色板,最后保存PIL.Image格式的图像即可。读取时,则需要同样使用PIL.Image格式来读取,然后转为array,而不可以使用OpenCV进行读取:

# 正确的读取方式
label = np.asarray(Image.open(label_path), dtype=np.int32)
 
# 错误的读取方式:因为调色板模式下,使用cv2.imread(label_path, 0)会默认以BGR转灰度图的模式读取,从而导致得到的label值不一致
label = cv2.imread(label_path, 0)

三、语义分割mask可视化

对于可视化则比较简单,因为不需要考虑模式问题,可以使用OpenCV也可以使用PIL的方式:

# OpenCV方式:
image = cv2.imread('2007_000033.jpg')
mask = cv2.imread('2007_000033.png')
mask_img = cv2.addWeighted(image, 0.5, mask, 0.7, 0.9)
cv2.imwrite("vis.jpg", mask_img)
 
# PIL方式:
image = Image.open('2007_000033.jpg')
mask = Image.open('2007_000033.png')
mask_img = Image.blend(image.convert('RGBA'),
                       mask.convert('RGBA'), 0.7)
mask_img.save("vis2.png")

两种方式的可视化结果一样:

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值