You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在YOLOv5中仅对感兴趣区域(ROI)执行目标检测

仅在指定ROI区域执行目标检测的实现方法

核心需求为过滤所有与预设感兴趣区域(ROI)无交集的检测结果,仅保留ROI范围内的有效目标。
ROI区域示例

方案1:检测前裁剪ROI(性能优先)

该方案适合ROI固定、无需保留全图检测输出的场景,实现成本低、检测速度快:

  • 先定义ROI的像素坐标,格式为(x_min, y_min, x_max, y_max),分别对应ROI左上角、右下角的坐标
  • 从原图中裁剪出ROI子图,示例代码:roi_img = original_img[y_min:y_max, x_min:x_max]
  • 直接对裁剪后的ROI子图运行目标检测模型
  • 若需要将检测结果映射回原图坐标,只需将所有检测框的x轴坐标加x_min、y轴坐标加y_min即可
    优势:需处理的图像范围更小,检测效率更高,不会产生多余的外区检测结果。

方案2:检测后过滤结果(兼容性优先)

该方案适合需要保留全图检测流程、ROI动态调整的场景,无需修改检测模型的输入逻辑:

  • 先对整张原图执行目标检测,得到所有检测框的坐标集合boxes = [ (x1, y1, x2, y2, confidence, class_id), ... ]
  • 定义ROI区域坐标roi = (rx1, ry1, rx2, ry2)
  • 遍历所有检测框,仅保留符合规则的结果,过滤规则可按需选择:
  1. 宽松规则:检测框与ROI的交集面积大于0即保留
  2. 严格规则:检测框中心点落在ROI范围内才保留 / 检测框与ROI的IOU大于预设阈值才保留
  • 输出过滤后的检测结果即可

过滤逻辑代码示例

def check_box_in_roi(box, roi):
    # 入参格式:box=(x1,y1,x2,y2),roi=(rx1,ry1,rx2,ry2)
    # 计算两个框的交集坐标
    inter_x1 = max(box[0], roi[0])
    inter_y1 = max(box[1], roi[1])
    inter_x2 = min(box[2], roi[2])
    inter_y2 = min(box[3], roi[3])
    # 交集面积大于0则判定为有效
    return (inter_x2 - inter_x1) > 0 and (inter_y2 - inter_y1) > 0

# 调用示例
roi_range = (120, 100, 550, 420)
all_detect_boxes = [[60,70,130,190], [220,210,310,320], [620,330,710,410]]
valid_boxes = [box for box in all_detect_boxes if check_box_in_roi(box, roi_range)]

内容的提问来源于stack exchange,提问作者Subham Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:42:03