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文件转mask图片
最新推荐文章于 2024-06-21 23:55:20 发布