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

如何将Yolov5归一化边界框转换为Pascal-VOC格式坐标

Yolov5归一化边界框转Pascal VOC坐标实现

前置说明

Yolov5的归一化边界框是基于原图实际宽高做的归一化处理,如果要转换为Pascal VOC标准的像素坐标,必须传入原图的宽度和高度作为参数。

核心转换逻辑

  • 先将归一化的中心点、宽高还原为像素级数值
  • 基于中心点和宽高计算左上角、右下角坐标
  • 可选做边界截断,避免坐标超出原图范围
  • 可选将结果转为整数,符合Pascal VOC的整数像素坐标要求

完整代码实现

def yolo2pascal(yolo_box, img_width, img_height, to_int=True, clip=True):
    x_center, y_center, w, h = yolo_box
    # 还原为像素级数值
    x_center = x_center * img_width
    y_center = y_center * img_height
    w = w * img_width
    h = h * img_height
    # 计算Pascal VOC格式坐标
    xmin = x_center - w / 2
    ymin = y_center - h / 2
    xmax = x_center + w / 2
    ymax = y_center + h / 2
    # 边界截断,避免坐标超出原图范围
    if clip:
        xmin = max(0, xmin)
        ymin = max(0, ymin)
        xmax = min(img_width, xmax)
        ymax = min(img_height, ymax)
    # 转整数像素坐标
    if to_int:
        xmin = int(round(xmin))
        ymin = int(round(ymin))
        xmax = int(round(xmax))
        ymax = int(round(ymax))
    return [xmin, ymin, xmax, ymax]

调用示例

以你提供的测试数据为例,假设原图尺寸为1024*1024:

test = [0.436523, 0.535156, 0.587891, 0.484375]
pascal_coords = yolo2pascal(test, 1024, 1024)
print(pascal_coords)
# 输出:[147, 301, 749, 797]

如果仅需要归一化格式的Pascal VOC坐标(不需要实际像素值),可以使用简化版本:

def yolo2pascal_norm(yolo_box):
    x_center, y_center, w, h = yolo_box
    xmin = x_center - w / 2
    ymin = y_center - h / 2
    xmax = x_center + w / 2
    ymax = y_center + h / 2
    return [xmin, ymin, xmax, ymax]

内容的提问来源于stack exchange,提问作者neel g

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:01