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)
dataturks格式转sbd格式
最新推荐文章于 2025-05-31 00:00:00 发布