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

目标检测中如何将DOTA四点标注转换为OBB的(cx, cy, w, h, a)格式

DOTA四顶点标注转OBB格式解决方案

核心转换逻辑

DOTA提供的4角点坐标可通过最小外接矩形计算直接转换为需要的(cx, cy, w, h, a)格式,最便捷的实现方式是调用OpenCV的cv2.minAreaRect接口,无需手动实现坐标计算。

代码实现示例

import cv2
import numpy as np

def dota_to_obb(dota_points: list) -> list:
    """
    输入DOTA标注的4点坐标 [x1,y1,x2,y2,x3,y3,x4,y4]
    输出OBB格式坐标 [cx, cy, w, h, angle]
    """
    # 将一维坐标列表转为4*2的点坐标数组
    pts = np.array(dota_points, dtype=np.float32).reshape(4, 2)
    # 计算最小外接矩形
    rect = cv2.minAreaRect(pts)
    (cx, cy), (w, h), angle = rect
    
    # --------------------------
    # 按需调整角度和宽高适配detectron2
    # detectron2的RotatedBoxes默认角度范围为[-90, 0),无需调整可直接返回
    # 若你使用的OBB实现要求角度∈[0, 90),可打开下方注释调整
    # if angle < -45:
    #     angle += 90
    #     w, h = h, w
    # --------------------------
    
    return [cx, cy, w, h, angle]

数据集适配注意事项

  • 转换后的OBB坐标需要和预处理后的图像坐标对齐,若你对图像做了缩放、裁剪、翻转等操作,需要同步对原始四点坐标做对应变换后再做OBB转换
  • DOTA标注中的difficult、occlusion等属性要同步映射到detectron2数据集的is_crowd、difficult字段,避免无效标注影响训练效果
  • 可提前批量转换所有DOTA标注为OBB格式后存储为自定义的JSON/COCO格式文件,避免训练时动态转换浪费算力

常见问题排查

  • 若出现训练时loss为NaN,优先检查OBB的宽高是否为正、角度是否符合你使用的detectron2分支的要求,部分第三方OBB扩展的角度定义和官方默认不一致
  • 若出现检测框偏移,检查坐标转换是否和图像预处理逻辑同步,是否存在图像缩放时坐标未对应缩放的问题

内容的提问来源于stack exchange,提问作者Arda Tümay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:02