Python实现IOU计算:矩形交并比算法详解与代码示例

沈知远
沈知远
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍如何使用Python计算两个矩形框的交并比(IOU),这是目标检测任务中评估预测边界框与真实标签差异的重要指标。文章解析了IOU的几何定义,提供了计算交集宽度和高度的公式,并附带完整的Python代码实现,帮助开发者快速掌握该算法。

IOU在目标检测中的作用

在目标检测任务中,计算两个矩形框的交并比(Intersection over Union, IOU)常被用作评估检测性能的关键指标。通过比较预测边界框(bbox)与真实标签(ground truth)之间的重叠程度,IOU能够直观反映预测结果的准确性。这一算法逻辑清晰,实现过程简单,适合快速集成到检测流程中。

坐标顺序注意事项

在实际调用函数时,需特别注意边界框坐标的输入顺序为(y0, x0, y1, x1),即(左上y, 左上x, 右下y, 右下x)。若坐标顺序不一致,可能导致计算结果错误,因此务必确保输入数据格式符合规范。

IOU算法原理与代码实现


#!/usr/bin/env python
# encoding: utf-8
 
def compute_iou(rec1, rec2):
  """
  computing IoU
  :param rec1: (y0, x0, y1, x1), which reflects
      (top, left, bottom, right)
  :param rec2: (y0, x0, y1, x1)
  :return: scala value of IoU
  """
  # computing area of each rectangles
  S_rec1 = (rec1[2] - rec1[0]) * (rec1[3] - rec1[1])
  S_rec2 = (rec2[2] - rec2[0]) * (rec2[3] - rec2[1])
 
  # computing the sum_area
  sum_area = S_rec1 + S_rec2
 
  # find the each edge of intersect rectangle
  left_line = max(rec1[1], rec2[1])
  right_line = min(rec1[3], rec2[3])
  top_line = max(rec1[0], rec2[0])
  bottom_line = min(rec1[2], rec2[2])
 
  # judge if there is an intersect
  if left_line >= right_line or top_line >= bottom_line:
    return 0
  else:
    intersect = (right_line - left_line) * (bottom_line - top_line)
    return (intersect / (sum_area - intersect))*1.0
 
 
if __name__=='__main__':
  rect1 = (661, 27, 679, 47)
  # (top, left, bottom, right)
  rect2 = (662, 27, 682, 47)
  iou = compute_iou(rect1, rect2)
  print(iou)

基于Python实现的IOU算法——提供最简洁易懂的代码实现方案。

概念介绍:

交并比(Intersection over Union)

如示意图所示,IOU的值定义为两个矩形框交集面积与并集面积的比值。具体而言,即计算两个矩形重叠部分的面积除以它们覆盖的总区域面积。

IOU的实现过程非常直观,主要执行步骤如下:

1. 计算交集形状的宽度:

IOU_W = min(x1,x2,x3,x4)+w1+w2-max(x1,x2,x3,x4)

2. 计算交集形状的高度:

IOU_H = min(y1,y2,y3,y4)+h1+h2-max(y1,y2,y3,y4)

上述计算基于简单的几何关系变换,配合示意图可以更清晰地理解交集宽度和高度的推导逻辑。

完整代码示例

代码实现:001-IOU计算

以上关于Python实现IOU计算的案例分享完毕,旨在为读者提供参考。希望这些内容能帮助大家更好地理解并应用该算法,同时也感谢各位的支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。