sam代码解读之将mask画在图像上

发布时间 2023-07-19 15:56:18作者: 海_纳百川

先看看代码

def show_anns(anns):
    if len(anns) == 0: #anns是个mask列表,里面包含很多mask,每个mask又是一个dict,里面有segmentation,area等
        return
    sorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True) # 根据area排序
    ax = plt.gca() # 此时的plt已经将原图作为背景图了
    ax.set_autoscale_on(False) # 取消自动缩放

    img = np.ones((sorted_anns[0]['segmentation'].shape[0], sorted_anns[0]['segmentation'].shape[1], 4)) #弄个画布,元素都是1,四个通道,rgb和透明度
    img[:,:,3] = 0 # 最后一个透明度设为0,先不显示
    for ann in sorted_anns: # 先遍历每个mask
        m = ann['segmentation'] #取每个分割结果
        color_mask = np.concatenate([np.random.random(3), [0.35]]) # 为每个maks设置显示颜色,np.random.random(3)表示随机rgb,0.35表示透明度
        img[m] = color_mask # 被分割的每个点都设置为color_mask
    ax.imshow(img) # 在背景图的基础上直接覆盖分割图