语义分割中,利用python将json文件转mask图片

import base64
import json
import os
import os.path as osp
import numpy as np
from PIL import Image
from labelme import utils
from skimage import img_as_ubyte
import cv2

json_file = r"D:\BaiduNetdiskDownload\laser_spot"

list_path = os.listdir(json_file)

for i in range(0, len(list_path)):
    path = os.path.join(json_file, list_path[i])
    if os.path.isfile(path) & path.endswith('.json'):

        data = json.load(open(path))  # 读取整个json文件中的内容
        # version(labelme版本)flag shapes(标签信息,记录了当时标记的每一个点) imagePath imageData(base64加密后的原图信息) imageHeight imageWidth
        # shape又包括shape_type flags lineColor fillColor
        imageData = data.get('imageData')
        if not imageData:
            imagePath = os.path.join(os.path.dirname(json_file), data['imagePath'])
            with open(imagePath, 'rb') as f:
                imageData = f.read()
                imageData = base64.b64encode(imageData).decode('utf-8')

        '''def img_b64_to_arr(img_b64):
                    img_data = base64.b64decode(img_b64)
                    img_arr = img_data_to_arr(img_data)
                    return img_arr'''
        img = utils.img_b64_to_arr(imageData)  # 原始图像

        '''img_dir = osp.join(osp.dirname(json_file), "img1")
        if not osp.exists(img_dir):
            os.mkdir(img_dir)
        img_resize = cv2.resize(img, (384, 384), interpolation=cv2.INTER_CUBIC)
        out_img = Image.fromarray(img_resize)
        out_img.save(img_dir + '/' + str(i) + '.tif')'''

        label_name_to_value = {'_background_': 0}
        for shape in sorted(data['shapes'], key=lambda x: x['label']):
            # sorted排序,key是排序的规则,“lambda x: x['label']”为对前面data['shapes']里的label进行排序
            label_name = shape['label']
            if label_name in label_name_to_value:
                label_value = label_name_to_value[label_name]
            else:
                label_value = len(label_name_to_value)  # 像素点的值等于标签在标签字典集中的位置(刚好是字典长度)
                label_name_to_value[label_name] = label_value  # 加入字典

        lbl, _ = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)

        mask_dir = osp.join(osp.dirname(json_file), "mask")
        if not osp.exists(mask_dir):
            os.mkdir(mask_dir)
            #utils.lblsave(osp.join(mask_dir, 'label1.png'), lbl) #三通道标签
        mask_dst = img_as_ubyte(lbl)
        mask_dst = np.uint8(mask_dst) * 255
        mask_dst = cv2.resize(mask_dst, (384, 384), interpolation=cv2.INTER_CUBIC)
        out_mask = Image.fromarray(mask_dst)
        out_mask.save(mask_dir + '/' + str(i) + '.tif')

你可能感兴趣的:(python,深度学习,json,python,计算机视觉)