图像缩放时如何正确转换x,y,w,h格式的边界框坐标
图像缩放时边界框坐标转换方法
首先明确已知基础参数:
- 原图尺寸:宽W=1980,高H=1080
- 原始边界框参数:x=759,y=786,w=369,h=100(x、y为边界框左上角点坐标)
- 目标新图尺寸:宽newW=640,高newH=480
根据不同的图像缩放逻辑,边界框转换方式分为两类:
场景1:直接拉伸图像至新尺寸(不保留原始宽高比)
你目前写的newX = (newW/W) * x仅完成了x坐标的转换,由于宽、高方向缩放比例不一致,y坐标和边界框宽高参数需要对应乘以高方向的缩放比。
首先计算两个方向的独立缩放系数:
scale_x = newW / W = 640 / 1980 ≈ 0.323 scale_y = newH / H = 480 / 1080 ≈ 0.444
完整转换公式:
new_x = x * scale_x new_y = y * scale_y new_w = w * scale_x new_h = h * scale_y
代入数值计算得到新边界框参数:
- new_x ≈ 245
- new_y ≈ 349
- new_w ≈ 119
- new_h ≈ 44
注意:这种方式会拉伸变形图像内容,实际视觉任务中极少使用。
场景2:等比例缩放+边缘填充(保留原始宽高比,即letterbox方式)
这是目标检测等任务最常用的缩放逻辑,不会造成内容变形,转换步骤如下:
- 取两个方向缩放系数的较小值作为统一缩放比,保证缩放后图像不超出新图边界:
scale = min(scale_x, scale_y) ≈ 0.323 - 计算等比例缩放后图像的实际尺寸:
scaled_w = W * scale ≈ 640 scaled_h = H * scale ≈ 349 - 计算上下/左右需要填充的边距(常规实现为两侧均分填充):
pad_w = (newW - scaled_w) / 2 = 0 pad_h = (newH - scaled_h) / 2 ≈ 65.5 - 代入公式计算新边界框参数:
new_x = x * scale + pad_w new_y = y * scale + pad_h new_w = w * scale new_h = h * scale
代入数值计算得到新边界框参数:
- new_x ≈ 245
- new_y ≈ 320
- new_w ≈ 119
- new_h ≈ 32
内容的提问来源于stack exchange,提问作者DholuBholu
相关产品推荐
相关产品推荐

