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