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

如何从Grounding DINO的predict函数中获取正确的绝对边界框坐标?

如何从Grounding DINO的predict函数中获取正确的绝对边界框坐标?

看起来你遇到的问题是对Grounding DINO返回的边界框格式理解有误!我之前也踩过这个坑,它返回的并不是我们常用的[x1, y1, x2, y2](左上角+右下角)格式,而是归一化的[x_center, y_center, width, height](中心坐标+宽高)格式,这就是你直接相乘后坐标不对的核心原因。

解决思路

要得到正确的绝对坐标,需要分两步转换:

  1. 先把归一化的中心坐标、宽高转换成对应图像尺寸的绝对数值
  2. 从绝对中心坐标和宽高推导得到左上角与右下角的坐标

修正后的代码

替换你原来的边界框转换代码段:

# Convert bounding boxes to absolute coordinates
abs_box = boxes * torch.tensor([wd, ht, wd, ht])
abs_box = [abs_bo.numpy().astype("int") for abs_bo in abs_box]

改为以下正确的转换逻辑:

# 处理Grounding DINO返回的归一化边界框格式:[x_center, y_center, width, height]
# 第一步:将归一化值转换为对应图像尺寸的绝对数值
box_abs = boxes * torch.tensor([wd, ht, wd, ht])
# 第二步:从中心坐标+宽高推导左上角(x1,y1)和右下角(x2,y2)
x1 = box_abs[:, 0] - box_abs[:, 2] / 2
y1 = box_abs[:, 1] - box_abs[:, 3] / 2
x2 = box_abs[:, 0] + box_abs[:, 2] / 2
y2 = box_abs[:, 1] + box_abs[:, 3] / 2
# 合并为[x1,y1,x2,y2]格式并转为整数
abs_box = torch.stack([x1, y1, x2, y2], dim=1).numpy().astype("int")

验证效果

修改后重新运行代码,你会发现用cv2.rectangle画出的蓝色框会和annotate函数生成的标注框完全重合,这样就得到了正确的绝对边界框坐标。

备注:内容来源于stack exchange,提问作者Leroy Jeslyn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:29:32