关于如何将labelme中错误标签去除
我只想要猫的标签,但是错误打了其他标签。现在的问题是如何将其他标签删除。
主要思路是,循环遍历json文件,将其中的小label裁剪出来,根据背景像素判断。
点击查看代码
def ROI_byMouse(img,lsPointsChoose):
'''裁剪函数'''
mask = np.zeros(img.shape, np.uint8)
pts = np.array(lsPointsChoose, np.int32) # pts是多边形的顶点列表(顶点集)
col0 =pts[:,0]
col1 =pts[:,1]
x1=np.min(col0)
y1=np.min(col1)
x2=np.max(col0)
y2 = np.max(col1)
pts = pts.reshape((-1, 1, 2))
# 这里 reshape 的第一个参数为-1, 表明这一维的长度是根据后面的维度的计算出来的。
# OpenCV中需要先将多边形的顶点坐标变成顶点数×1×2维的矩阵,再来绘制
# --------------画多边形---------------------
mask = cv2.polylines(mask, [pts], True, (255, 255, 255))
##-------------填充多边形---------------------
mask2 = cv2.fillPoly(mask, [pts], (255, 255, 255))
ROI = cv2.bitwise_and(mask2, img)
return ROI[y1:y2,x1:x2]
in_img_path = r".\data\cat.png"
in_json_path = r".\annotations\cat.json"
with open(in_json_path,'r') as f:
json_data = json.load(f)
new_labels = []
for label in json_data["shapes"]:
points = label["points"]
img = cv2.imread(in_img_path)
img = ROI_byMouse(img,points)
count_zero = np.sum((img==0)) # 统计背景像素点
count_w = np.sum((img>=200)) # 统计白色像素点
if count_w/(img.size-count_zero) <0.8: # 防止补充边缘影响
new_labels.append(label)
json_data["shapes"] = new_labels
with open(in_json_path, 'w') as file:
json.dump(json_data, file,)
处理后的效果图: