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

如何确定cv2.resize操作后原图像像素在缩放图中的对应坐标

OpenCV cv2.resize像素坐标映射解决方案

核心映射规则(适配宽高比变化场景)

cv2.resize的坐标映射逻辑与插值类型无关,插值仅用于计算目标像素的颜色值,坐标换算规则统一,完全支持非等比缩放场景:
首先明确几个参数定义:

  • 原图尺寸:src_h(高度)、src_w(宽度)
  • 缩放后目标尺寸:dst_h、dst_w
  • 原图像素坐标:(src_x, src_y),x为水平方向坐标,y为垂直方向坐标
  • 对应缩放后坐标:(dst_x, dst_y)

通用换算公式

OpenCV默认将像素整数坐标视为像素左上角位置,实际像素中心位置需偏移0.5个像素单位,因此通用映射公式为:

dst_x = (src_x + 0.5) * (dst_w / src_w) - 0.5
dst_y = (src_y + 0.5) * (dst_h / src_h) - 0.5

该公式无需考虑宽高比是否变化,x、y轴独立计算即可。如果不需要亚像素级精度,可对结果取整:单像素点取最近整数, bounding box 左上角向下取整、右下角向上取整即可保证原区域完整覆盖。

示例计算

以你提到的原图坐标(785, 251)为例,假设原图尺寸为1000x800(宽1000,高800),非等比缩放到500x600:

  • 计算x轴缩放系数:500 / 1000 = 0.5
  • 计算y轴缩放系数:600 / 800 = 0.75
  • 目标x坐标:(785 + 0.5) * 0.5 - 0.5 = 392.25
  • 目标y坐标:(251 + 0.5) * 0.75 - 0.5 = 188.125

直接通过OpenCV获取映射表的方法

如果需要批量生成所有像素的映射关系,可以通过坐标图缩放的方式直接获取,避免手动计算出错:

  1. 生成两张和原图尺寸一致的单通道浮点图,map_x每个位置的值等于自身x坐标,map_y每个位置的值等于自身y坐标
  2. 对map_x和map_y使用和图像缩放完全一致的参数(目标尺寸、插值方式、所有flags)调用cv2.resize
  3. 缩放后的map_x、map_y中,(i,j)位置的值就是缩放后图像(i,j)坐标对应的原图x、y坐标;如果需要原图到目标的映射,反向生成目标尺寸的坐标图缩放到原图尺寸即可。

Bounding box适配方案

直接对原bbox的左上角(x1,y1)和右下角(x2,y2)分别调用上述映射公式计算得到新的(x1', y1')、(x2', y2'),即可得到和原区域完全对应的缩放后bbox,不受宽高比变化影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:54:05