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')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/380989.html
標籤:其他
上一篇:大一新生的第一學期感想及疑惑
