import numpy as np
# 1.定义方法计算IOU
def Iou(box1, box2):
# 1.1 使用极坐标形式表示:直接获取两个bbox的坐标,获取两个框的左上角坐标和右下角坐标
xmin1, ymin1, xmax1, ymax1 = box1
xmin2, ymin2, xmax2, ymax2 = box2
# 1.2 获取矩形框交集对应的左上角和右下角的坐标(intersection)
xx1 = np.max([xmin1, xmin2])
yy1 = np.max([ymin1, ymin2])
xx2 = np.min([xmax1, xmax2])
yy2 = np.min([ymax1, ymax2])
# 1.3 计算两个矩形框面积
area1 = (xmax1 - xmin1) * (ymax1 - ymin1)
area2 = (xmax2 - xmin2) * (ymax2 - ymin2)
# 1.4 计算交集面积
# inter_area = (np.max([0, xx2 - xx1])) * (np.max([0, yy2 - yy1]))
inter_area = (xx2 - xx1) * (yy2 - yy1)
# 1.5 计算交并比
iou = inter_area / (area1 + area2 - inter_area)
return iou
if __name__ == "__main__":
True_bbox, predict_bbox = [100, 35, 398, 400], [40, 150, 355, 398]
iou = Iou(True_bbox, predict_bbox)
print(iou)