本文共 2054 字,大约阅读时间需要 6 分钟。
1.任意四边形坐标标记格式:tl_x,tl_y,tr_x,tr_y,br_x,br_y,bl_x,bl_y。从左上点开始顺时针旋转的四个顶点的坐标
2.转换代码:
import jsonimport base64from PIL import Imageimport ioimport osimport cv2import numpy as npdef generate_json(file_dir,file_name): str_json = {} shapes = [] # 读取坐标 fr = open(os.path.join(file_dir, file_name)) for line in fr.readlines(): # 逐行读取,滤除空格等 lineArr = line.strip().split(', ') points = [] points.append([float(lineArr[0]),float(lineArr[1])]) points.append([float(lineArr[2]),float(lineArr[3])]) points.append([float(lineArr[4]),float(lineArr[5])]) points.append([float(lineArr[6]),float(lineArr[7])]) print(points) shape = {} shape["label"] = "plate_1" shape["points"] = points shape["line_color"] = [] shape["fill_color"] = [] shape["flags"] = {} shapes.append(shape) str_json["version"] = "3.14.1" str_json["flags"] = {} str_json["shapes"] = shapes str_json["lineColor"] = [0, 255, 0, 128] str_json["fillColor"] = [255, 0, 0, 128] picture_basename = file_name.replace('.txt', '.jpg') str_json["imagePath"] = picture_basename img = cv2.imread(os.path.join(file_dir, picture_basename)) str_json["imageHeight"] = img.shape[0] str_json["imageWidth"] = img.shape[1] str_json["imageData"] = base64encode_img(os.path.join(file_dir, picture_basename)) return str_jsondef base64encode_img(image_path): src_image = Image.open(image_path) output_buffer = io.BytesIO() src_image.save(output_buffer, format='JPEG') byte_data = output_buffer.getvalue() base64_str = base64.b64encode(byte_data).decode('utf-8') return base64_strfile_dir = "C:\\txt_to_json"file_name_list = [file_name for file_name in os.listdir(file_dir) \ if file_name.lower().endswith('txt')]for file_name in file_name_list: str_json = generate_json(file_dir,file_name) json_data = json.dumps(str_json) jsonfile_name = file_name.replace(".txt",".json") f = open(os.path.join(file_dir, jsonfile_name), 'w') f.write(json_data) f.close()
转载地址:http://kxssi.baihongyu.com/