首先要安装配好labelme(上篇)
根据该readme文档尝试
https://github.com/wkentaro/labelme/tree/master/examples/tutorial
改动labelme_draw_json
把scripts里的labelme_draw_json移动到该目录下,并加.py 后缀
把想可视化的json放在同一目录
shift+右键打开命令行
python labelme_draw_json.py bird.json
之前标定的bird和默认背景分别显示
labelme.json显示
import json
import numpy as np
import skimage.io
import cv2
import matplotlib.pyplot as plt
import PIL.Image
import PIL.ImageDraw
data=json.load(open('bird.json'))
img_path=data['imagePath'].split('/')[-1]
img=skimage.io.imread(img_path)
def polygons_to_mask(img_shape, polygons):
'''
边界点生成mask
:param img_shape: [h,w]
:param polygons: labelme JSON中的边界点格式 [[x1,y1],[x2,y2],[x3,y3],...[xn,yn]]
:return:
'''
mask = np.zeros(img_shape, dtype=np.uint8)
mask = PIL.Image.fromarray(mask)
xy = list(map(tuple, polygons))
PIL.ImageDraw.Draw(mask).polygon(xy=xy, outline=1, fill=1)
mask = np.array(mask, dtype=bool)
return mask
def polygons_to_mask2(img_shape, polygons):
'''
边界点生成mask
:param img_shape: [h,w]
:param polygons: labelme JSON中的边界点格式 [[x1,y1],[x2,y2],[x3,y3],...[xn,yn]]
:return:
'''
mask = np.zeros(img_shape, dtype=np.uint8)
polygons = np.asarray([polygons], np.int32) # 这里必须是int32,其他类型使用fillPoly会报错
# cv2.fillPoly(mask, polygons, 1) # 非int32 会报错
cv2.fillConvexPoly(mask, polygons, 1) # 非int32 会报错
return mask
points=[]
labels=[]
for shapes in data['shapes']:
points.append(shapes['points'])
labels.append(shapes['label'])
mask0=polygons_to_mask(img.shape[:2],points[0])
#mask1=polygons_to_mask(img.shape[:2],points[1])
plt.subplot(121)
plt.imshow(img)
plt.axis('off')
plt.title('original')
plt.subplot(122)
plt.imshow(mask0.astype(np.uint8),'gray')
plt.axis('off')
plt.title('SegmentationObject:\n'+labels[0])
plt.show()
reference
json文件格式:
https://blog.csdn.net/wc781708249/article/details/79603522#%E9%A6%96%E5%85%88%E6%98%AF%E8%A6%81labelme%E5%81%9A%E5%A5%BD%E5%9B%BE%E7%89%87%E6%A0%87%E6%B3%A8