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

先看看代码

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) # 在背景图的基础上直接覆盖分割图

 注:ann['segmentation']表示分割的结果,一个二维数据,尺寸为图像的w×h,被分割的位置使用True表示,未被分割的位置使用False表示,所以表现为[[False, False,False,...],[False,False,False,...],...]

posted @ 2023-07-19 15:54  海_纳百川  阅读(311)  评论(0)    收藏  举报
本站总访问量