算一个bbox和一个mask区域的重叠

def get_bbox_in_mask_overlap_ratio(bbox, mask):
    """
    判断边界框是否在二值化的 mask 区域内。(二值化为0和255),重叠区域占bbox的比率

    参数:
        bbox: tuple 或 list,表示边界框 (x_min, y_min, x_max, y_max)
        mask: numpy 数组,二值化的图像,值为 1 表示区域内,值为 0 表示区域外

    返回:
        bool: 如果 bbox 完全在 mask 区域内,返回 True;否则返回 False
    """
    x_min, y_min, x_max, y_max = bbox

    # 检查 bbox 的边界是否超出 mask 的范围
    if x_min < 0 or y_min < 0 or x_max > mask.shape[1] or y_max > mask.shape[0]:
        return False

    # 提取 bbox 区域对应的 mask 子区域
    bbox_mask = mask[int(y_min):int(y_max), int(x_min):int(x_max)]

    ## mask fg val is 1
    # 判断 bbox 区域是否完全在 mask 区域内
    #return np.any(bbox_mask == 255)
    bbox_area = (y_max-y_min)*(x_max-x_min)
    ## 获得由多少个重叠的像素
    bin_num = np.sum(bbox_mask == 255)
    ## 计算重叠区域的占比
    ratio = bin_num/(bbox_area+1)

    print('===================',bin_num, bbox_area, bin_num*1.0/bbox_area)
    return ratio

  

posted on 2025-11-27 14:18  Sanny.Liu-CV&&ML  阅读(1)  评论(0)    收藏  举报

导航