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