1. 原理
计算公式:
交集区域、并集区域:
2. 代码
# ---------- IOU ----------
import numpy as np
import cv2
import matplotlib.pyplot as plt
image = np.zeros((512, 512, 3), dtype=np.uint8) # 创建一个512x512x3的全零numpy数组,表示一张图像
image[:] = 255 # 将数组的所有值设为255
Real_box = [50,50,300,300] # 实际框:左上角的x、左上角的y、右下角的x、右下角的y
Predict_box = [60,60,320,320] # 预测框:左上角的x、左上角的y、右下角的x、右下角的y
# 画出实际框和预测框
cv2.rectangle(image, (Real_box[0], Real_box[1]), (Real_box[2], Real_box[3]), (0, 255, 0), 5)
cv2.rectangle(image, (Predict_box[0], Predict_box[1]), (Predict_box[2], Predict_box[3]), (255, 0, 0), 5)
# 计算交集区域的坐标
x_left_top = max(Real_box[0], Predict_box[0])
y_left_top = max(Real_box[1], Predict_box[1])
x_right_bottom = min(Real_box[2], Predict_box[2])
y_right_bottom = min(Real_box[3], Predict_box[3])
# 计算交集区域的面积
Intersection_area = max(0, x_right_bottom - x_left_top) * max(0, y_right_bottom - y_left_top)
# 计算真实框和预测框的面积
Real_area = (Real_box[2] - Real_box[0]) * (Real_box[3] - Real_box[1])
Predict_area = (Predict_box[2] - Predict_box[0]) * (Predict_box[3] - Predict_box[1])
# 计算并集区域的面积
Union_area = Real_area + Predict_area - Intersection_area
# 计算IOU
IOU = Intersection_area / float(Union_area)
plt.imshow(image)
plt.title('IOU: %.2f' %IOU)
plt.axis('off')
plt.show()
3. 结果