- 设置原始图片路径
- 设置json文件路径
- 设置保存文件路径
- 设置不同类别对应的颜色
- 设置透明度
- run
import cv2
import numpy as np
from PIL import Image
import json
import os
def JsonVisualization(data_file_dir, json_file_dir, save_file_dir, bbox_color_dict, transparency):
for img_name in os.listdir(data_file_dir):
if img_name.endswith('.jpg') or img_name.endswith('.png'):
print(img_name)
img_path = os.path.join(data_file_dir, img_name)
json_name = img_name[:-3] + "json"
json_path = os.path.join(json_file_dir, json_name)
img_ori = Image.open(img_path)
img_ori = cv2.cvtColor(np.asarray(img_ori), cv2.COLOR_RGB2BGR)
zeros = np.zeros(img_ori.shape, dtype=np.uint8)
with open(json_path) as fp:
json_data = json.load(fp)
for shape in json_data["shapes"]:
label = shape['label']
dot = shape['points']
pts = np.array((np.array(dot)).reshape((-1, 1, 2)), np.int32)
mask = cv2.fillPoly(zeros, [pts], bbox_color_dict[label])
img_save = cv2.addWeighted(img_ori, 1, mask, transparency, 0)
image = Image.fromarray(cv2.cvtColor(img_save, cv2.COLOR_BGR2RGB))
image.save(os.path.join(save_file_dir, img_name))
return 1
if __name__ == "__main__":
dir_path = os.path.dirname(os.path.abspath(__file__))
data_file_dir = os.path.join(dir_path, 'Image')
json_file_dir = os.path.join(dir_path, 'segmentation')
save_file_dir = os.path.join(dir_path, 'Save')
bbox_color_dict = {'breakage': (0, 0, 255), 'corrosion': (0, 255, 0)}
transparency = 0.5
_ = JsonVisualization(data_file_dir, json_file_dir, save_file_dir, bbox_color_dict, transparency)