关于如何将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,)

处理后的效果图:

posted @ 2024-11-13 17:18  ﹄重噺,学  阅读(8)  评论(0编辑  收藏  举报