# -*- coding: utf-8 -*-
import os
import sys
import json
import io
import random
import re
import cv2
import numpy as np
from random import choice
import math
from PIL import Image
source_path='./mac'
destination_path='./mirror'
angle=[0]
article_info = {}
data_json = json.loads(json.dumps(article_info))
data_json['version']='3.6.16'
data_json['flags']={}
data_json["lineColor"]=[
0,
255,
0,
128
]
data_json["fillColor"]=[
255,
0,
0,
128
]
def file_name(file_dir):
L = []
for root, dirs, files in os.walk(file_dir):
for file in files:
if os.path.splitext(file)[1] == '.json':
L.append(os.path.join(root , file))
return L
for name in enumerate(file_name(source_path)):
shape_json = []
m_path =name[1]
dir=os.path.dirname(m_path)
file_json = io.open(m_path,'r',encoding='utf-8')
json_data = file_json.read()
data = json.loads(json_data)
data_json['imageData']=None
data_name= data['imagePath']
data_path = dir+'/'+data_name
angle_item=choice(angle)
object_name= os.path.splitext(data['imagePath'])[0]
for i in range(len(data['shapes'])):
m_xmin_0=(data['shapes'][i]['points'][0][0] if(data['shapes'][i]['points'][0][0]<data['shapes'][i]['points'][1][0]) else data['shapes'][i]['points'][1][0])
print ('m_xmin_0=',m_xmin_0)
m_ymin_0=(data['shapes'][i]['points'][0][1] if(data['shapes'][i]['points'][0][1]<data['shapes'][i]['points'][1][1]) else data['shapes'][i]['points'][1][1])
print ('m_ymin_0=',m_ymin_0)
m_xmax_0=(data['shapes'][i]['points'][1][0] if(data['shapes'][i]['points'][0][0]<data['shapes'][i]['points'][1][0]) else data['shapes'][i]['points'][0][0])
print ('m_xmax_0=',m_xmax_0)
m_ymax_0=(data['shapes'][i]['points'][1][1] if(data['shapes'][i]['points'][0][1]<data['shapes'][i]['points'][1][1]) else data['shapes'][i]['points'][0][1])
print ('m_ymax_0=',m_ymax_0)
m_name_0=data['shapes'][i]['label']
print ('m_name_0=',m_name_0)
data_json_line_color=data['shapes'][i]['line_color']
data_json_fill_color=data['shapes'][i]['fill_color']
data_json_rec=data['shapes'][i]['shape_type']
im=Image.open(data_path)
img = Image.open(data_path);
img_pixel = img.load();
mirror = Image.new(img.mode,img.size,"white");
width, height = img.size;
"""水平镜像和垂直镜像转换,遍历每个像素点,将后列变前列"""
if angle_item:
for y in range(height):
for x in range(width):
pixel = img_pixel[width-1-x,y];
mirror.putpixel((x,y),pixel);
else:
for x in range(width):
for y in range(height):
pixel = img_pixel[x,height-1-y];
mirror.putpixel((x,y),pixel);
(filename, extension) = os.path.splitext(data_name)
data_new_picture_name=destination_path+"/"+filename+"_mirror"+".jpg"
data_new_json_name =destination_path+"/"+filename+"_mirror"+".json"
data_json['imagePath']=filename+"_mirror"+".jpg"
picture_name=filename+"_mirror"+".jpg"
mirror.save(data_new_picture_name)
img=cv2.imread(data_new_picture_name)
data_json['imageWidth']=img.shape[0]
data_json['imageHeight']=img.shape[1]
if angle_item:
data_json_min_x=width-m_xmin_0
data_json_min_y=m_ymin_0
data_json_max_x=width-m_xmax_0
data_json_max_y=m_ymax_0
else:
data_json_min_x=m_xmin_0
data_json_min_y=height-m_ymin_0
data_json_max_x=m_xmax_0
data_json_max_y=height-m_ymax_0
shape_json_item={"label": m_name_0,"line_color": data_json_line_color,"fill_color": data_json_fill_color,"points": [[data_json_min_x,data_json_min_y],
[data_json_max_x,data_json_max_y]],"shape_type": data_json_rec}
shape_json.append(shape_json_item)
data_json['shapes']=shape_json
data_info = json.dumps(data_json, ensure_ascii=False)
fp=open(data_new_json_name, "w+")
json.dump(data_info,fp,ensure_ascii=False,indent =4)
fp.close()
fp=open(data_new_json_name, "r")
for x in fp.readlines():
y=x.replace("\\\"","\"")
z=y.replace("\"{","{")
w=z.replace("}\"","}")
fp.close()
fp=open(data_new_json_name, "w+")
fp.write(w)
fp.close()