已知新旧图像尺寸与原多边形坐标 计算缩放后多边形新坐标
图像关联多边形缩放适配顶点坐标计算方法
核心计算逻辑
多边形随图像缩放的本质是对所有顶点坐标做同规则的线性映射,根据适配模式不同分为两种计算方式:
模式1:直接拉伸填满目标图像(无黑边、可能改变图像比例)
这是最常用的全填充缩放适配逻辑,分别计算宽、高两个维度的缩放比例,对每个顶点的x、y坐标分别按对应比例换算即可:
- 先计算两个方向的缩放系数
- 宽度缩放系数:
scale_x = 目标图像宽度 / 原始图像宽度 - 高度缩放系数:
scale_y = 目标图像高度 / 原始图像高度
- 宽度缩放系数:
- 代入给出的尺寸参数计算具体系数:
scale_x = 640 / 1980 ≈ 0.3232 scale_y = 480 / 1080 ≈ 0.4444 - 逐顶点换算坐标,换算公式为:
新x坐标 = 原始x坐标 * scale_x 新y坐标 = 原始y坐标 * scale_y - 代入给出的原始顶点列表,计算得到的缩放后顶点约为:
- (100,200) → (32, 89)
- (200,300) → (65, 133)
- (300,400) → (97, 178)
- (50,60) → (16, 27)
- (90,100) → (29, 44)
- (400,300) → (129, 133)
模式2:等比例缩放适配(保持原始图像比例、可能留黑边)
如果要求图像不发生拉伸形变,需要取宽、高缩放系数中更小的值作为全局统一缩放系数,再额外计算居中偏移量修正坐标:
- 统一缩放系数:
scale = min(scale_x, scale_y),本题中取约0.3232 - 计算宽高方向的黑边偏移量:
- 宽度方向总留白:
offset_x_total = 目标图像宽度 - 原始图像宽度 * scale - 高度方向总留白:
offset_y_total = 目标图像高度 - 原始图像高度 * scale - 单方向居中偏移:
offset_x = offset_x_total / 2,offset_y = offset_y_total / 2
- 宽度方向总留白:
- 顶点换算公式为:
新x坐标 = 原始x坐标 * scale + offset_x 新y坐标 = 原始y坐标 * scale + offset_y
注意:最终计算得到的浮点坐标可根据业务场景(如前端渲染、CV标注转换)取整或保留指定小数位,避免精度问题导致多边形错位。
内容的提问来源于stack exchange,提问作者DholuBholu
相关产品推荐
相关产品推荐

