Python开发---语义分割标注转图片掩膜

2022-03-02 17:07:48 浏览数 (1)

在深度学习进行图像识别,物体检测,语义分割,实例分割时,需要使用已经标注好的数据集来训练模型。

可以使用常用的标注软件或在线标注平台来进行图像数据集的标注。通常标注后的格式为XML格式(VOC XML),或JSON格式(VGG JSON,COCO JSON),但是训练阶段(尤其是语义分割)时有时候使用图片格式更为方便。

导出为VGG JSON格式如下:

使用PIL将语义分割标注后的JSON格式转换为图片格式

代码如下:

代码语言:python代码运行次数:0复制
from PIL import Image,ImageDraw
import json
import os
def json2jpg(annosFile,imgsDir,masksDir,colorMap,isAlpha,backgroundColor):
    f=open(annosFile,'r')
    annos=json.load(f)
    f.close()
    for file,anno in annos.items():
        print(file)
        #读取原始图像大小
        rawFile=os.path.join(imgsDir,anno['filename'])
        
        rawImg=Image.open(rawFile)
        #新建同样大小画布,jpg格式还是png格式
        mode='RGBA' if isAlpha else 'RGB'
        ext='.png' if isAlpha else '.jpg'
        maskImg=Image.new(mode,rawImg.size,backgroundColor)
        draw=ImageDraw.Draw(maskImg)
        for index,region in anno['regions'].items():
            print(index)
            x=region['shape_attributes']['all_points_x']
            y=region['shape_attributes']['all_points_y']
            label=region['region_attributes']['label']
            x=map(int,x)
            y=map(int,y)
            #使用标注类别对应的颜色标注每一个标注区域
            draw.polygon(list(zip(x,y)),fill=colorsMap.get(label,backgroundColor))
        maskFile=os.path.join(masksDir,os.path.splitext(anno['filename'])[0])
        maskImg.save(maskFile ext)



if __name__=='__main__':
    #定义各个标注类别对应的颜色
    colorsMap={'foreground':'#00ff00','body':'yellow'}
    json2jpg('labels.json','pics/','masks/',colorsMap,True,'black')
        
    
    

同理对于COCO JSON等其他JSON格式,以及XML格式都可以利用PIL转换为掩膜图片。

0 人点赞