IoU - 图1

    1. # boxA 存储的是边界框的左上顶点坐标和右下顶点坐标
    2. # boxA=[x1,y1,x2,y2]
    3. def iou(boxA, boxB):
    4. # 计算重合部分的上下左右4个边的值,注意最大最小函数的使用
    5. left_max = max(boxA[0],boxB[0])
    6. top_max = max(boxA[1],boxB[1])
    7. right_min = min(boxA[2], boxB[2])
    8. bottom_min = min(boxA[3], boxB[3])
    9. # 计算重合部分的面积
    10. inter = max(0,(right_min-left_max)) * max(0, (bottom_min-top_max)) # 宽*高
    11. Sa = (boxA[2]-boxA[0])*(boxA[3]-boxA[1])
    12. Sb = (boxB[2]-boxB[0])*(boxB[3]-boxB[1])
    13. # 计算所有区域的面积并计算 iou
    14. union = Sa+Sb-inter
    15. iou = inter/union
    16. return iou
    17. if __name__ == "__main__":
    18. boxA = [0,0,5,5]
    19. boxB = [1,1,6,6]
    20. print(iou(boxA,boxB)) # inter = 16 union=34
    21. boxA = [0,0,5,5]
    22. boxB = [5,5,6,6]
    23. print(iou(boxA,boxB)) # inter = 0 union=26