在SAM的加持下,我们很容易得到物体的mask,但是物体的bbox信息通常也很有用。那么,我们可以写一个函数,立马可以通过mask得到bbox。
代码如下:
import numpy as np
def mask2bbox(mask):
nonzero_indices = np.nonzero(mask) # 获取非零值的索引
min_y, min_x = np.min(nonzero_indices, axis=1) # 计算最小的 y 和 x 坐标
max_y, max_x = np.max(nonzero_indices, axis=1) # 计算最大的 y 和 x 坐标
bbox = [min_x, min_y, max_x, max_y]
return bbox
if __name__ == "__main__":
mask = np.zeros((10, 10))
mask[3:7, 4:8] = 1
print("Bounding box:", mask2bbox(mask))