def getbox(cnt): rect = cv2.minAreaRect(cnt) # 获得最小外部矩形(中心(x,y), (宽,高), 旋转角度) box = cv2.boxPoints(rect) # 获得最小外部矩形的4个顶点坐标(ps: cv2.boxPoints(rect) for OpenCV 3.x) # box = np.int(box) return [int(np.min(box[:,0])),int(np.min(box[:,1])),int(np.max(box[:,0])),int(np.max(box[:,1]))] imgname = 0 SbdDict = {
} ImagesList = [] AnnotationsList = [] imgids = 0 annotationids = 0 imgrootdir = '/home/lhq/segmentation/snake-master/data/sbd/img' with open('ice cream.json') as f: datas = f.readlines() for data in datas: data = data.strip() Dict = json.loads(data)
content = Dict['content'].split('___')[-1].split('.')[-1]
content = str(imgname) + '.' + content
imgname += 1
Dict['content'] = content
imgdict = {
}
imgdict['file_name'] = Dict['content']
H,W,_ = cv2.imread(os.path.join(imgrootdir,Dict['content'])).shape
imgdict['height'] = H
imgdict['width'] = W
imgdict['id'] = imgids
ImagesList.append(imgdict)
annotations = Dict['annotation']
for annotation in annotations:
annotationdict = {
}
segmentationlist = []
points = annotation['points']
for point in points:
point[0] = int(point[0] * W)
point[1] = int(point[1] * H)
segmentationlist.append(point[0])
segmentationlist.append(point[1])
area = cv2.contourArea(np.array(points))
annotationdict['segmentation'] = [segmentationlist]
annotationdict['area'] = area
annotationdict['image_id'] = imgids
box = getbox(np.array(points))
annotationdict['bbox'] = box
annotationdict['iscrowd'] = 0
annotationdict['id'] = annotationids
annotationdict['category_id'] = 1
annotationids += 1
AnnotationsList.append(annotationdict)
imgids += 1
with open('/home/lhq/centernettrain/icecream.json') as f:
datas = f.readlines()
for data in datas:
data = data.strip()
Dict = json.loads(data)
content = Dict['content'].split('___xgbz_')[-1]
Dict['content'] = content
imgdict = {
}
imgdict['file_name'] = Dict['content']
H,W,_ = cv2.imread(os.path.join(imgrootdir,Dict['content'])).shape
imgdict['height'] = H
imgdict['width'] = W
imgdict['id'] = imgids
ImagesList.append(imgdict)
annotations = Dict['annotation']
for annotation in annotations:
annotationdict = {
}
segmentationlist = []
points = annotation['points']
for point in points:
point[0] = int(point[0] * W)
point[1] = int(point[1] * H)
segmentationlist.append(point[0])
segmentationlist.append(point[1])
area = cv2.contourArea(np.array(points))
annotationdict['segmentation'] = [segmentationlist]
annotationdict['area'] = area
annotationdict['image_id'] = imgids
box = getbox(np.array(points))
annotationdict['bbox'] = box
annotationdict['iscrowd'] = 0
annotationdict['id'] = annotationids
annotationdict['category_id'] = 1
annotationids += 1
AnnotationsList.append(annotationdict)
imgids += 1
with open('icecream_6_8.json') as f:
datas = f.readlines()
for data in datas:
data = data.strip()
Dict = json.loads(data)
content = Dict['content'].split('___dataturks_')[-1]
Dict['content'] = content
imgdict = {
}
imgdict['file_name'] = Dict['content']
H,W,_ = cv2.imread(os.path.join(imgrootdir,Dict['content'])).shape
imgdict['height'] = H
imgdict['width'] = W
imgdict['id'] = imgids
ImagesList.append(imgdict)
annotations = Dict['annotation']
for annotation in annotations:
annotationdict = {
}
segmentationlist = []
points = annotation['points']
for point in points:
point[0] = int(point[0] * W)
point[1] = int(point[1] * H)
segmentationlist.append(point[0])
segmentationlist.append(point[1])
area = cv2.contourArea(np.array(points))
annotationdict['segmentation'] = [segmentationlist]
annotationdict['area'] = area
annotationdict['image_id'] = imgids
box = getbox(np.array(points))
annotationdict['bbox'] = box
annotationdict['iscrowd'] = 0
annotationdict['id'] = annotationids
annotationdict['category_id'] = 1
annotationids += 1
AnnotationsList.append(annotationdict)
imgids += 1
SbdDict['images'] = ImagesList
SbdDict['annotations'] = AnnotationsList
SbdDict['categories'] = [{
'supercategory': 'none', 'id': 1, 'name': 'icecream'}]
with open('train.json','w') as fw:
json.dump(SbdDict,fw)