AI 检测图片怎么缩放?用 OpenCV 保持比例并还原框坐标

等比例缩放图片并补边,记录实际双轴缩放系数和偏移,再用示例框核对逆变换。

把长方形检测图片直接拉成正方形,会改变物体比例。更容易核对的处理是等比例缩放,再补边凑到目标尺寸,同时保存缩放系数和偏移量。还原框坐标时先减补边,再除以对应轴的缩放系数。

先判断是否需要自己预处理

许多检测框架已经在内部预处理并把框还原到原图,若输出本来就是原图坐标,再手工还原一次会出错。只有自定义预处理或模型直接返回处理后坐标时,才需要这张变换记录。

AI 检测图片怎么缩放?用 OpenCV 保持比例并还原框坐标

python -m pip install opencv-python-headless numpy

准备 photo.jpg,保存下面代码为 resize_boxes.py,运行 python resize_boxes.py。本地用自制 800×450 示例图运行了尺寸与坐标往返检查,没有运行目标检测模型。测试环境为 Python 3.11、OpenCV 5.0.0、NumPy 2.4.6。

等比例缩放、补边及逆变换

import cv2
import numpy as np

image = cv2.imread("photo.jpg")
if image is None:
    raise ValueError("photo.jpg cannot be read")
h, w = image.shape[:2]
size = 640
ratio = min(size / w, size / h)
new_w, new_h = round(w * ratio), round(h * ratio)
resized = cv2.resize(image, (new_w, new_h), interpolation=cv2.INTER_AREA)
left, top = (size - new_w) // 2, (size - new_h) // 2
canvas = cv2.copyMakeBorder(resized, top, size-new_h-top,
                           left, size-new_w-left, cv2.BORDER_CONSTANT,
                           value=(114, 114, 114))
assert cv2.imwrite("letterbox.png", canvas)
sx, sy = new_w / w, new_h / h
# Synthetic box for a round-trip calculation, not a model prediction.
original = np.array([w*0.2, h*0.2, w*0.8, h*0.8])
scaled = original * [sx, sy, sx, sy] + [left, top, left, top]
restored = (scaled - [left, top, left, top]) / [sx, sy, sx, sy]
assert np.allclose(original, restored)
print("original", (w, h), "resized", (new_w, new_h), "padding", (left, top))
print("box_on_canvas", scaled.tolist(), "restored", restored.tolist())

整数尺寸取整后,sx 与 sy 可能略有差别,所以代码分别保存两个系数。left 和 top 是左、上补边,右、下剩余像素另补;不把四边都假定成相同值。

结果该怎样核对

示例输入 800×450 时,缩放尺寸为 640×360,上补边为 140,最终画布为 640×640。代码的示例框做往返后应回到原坐标;这验证逆变换算式,不能证明检测框识别正确。

打开 letterbox.png 检查主体比例是否保持。拿真实模型的一个框做逆变换并画回原图,确认没有把补边算进物体位置,必要时把坐标裁到原图边界内。

三个常见错误

  • 直接用缩放比例而忘了补边:框会整体向一侧偏移。
  • 把 x、y 顺序交换:宽高或框位置异常,先核对数组维度。
  • 混用归一化框和像素框:先确认模型接口,再决定是否乘画布尺寸。

OpenCV 默认读取 BGR;模型若要求 RGB,还要按其输入契约转换。缩放只处理几何关系,不替代模型的归一化、通道顺序或训练预处理。

资料与适用范围

本文依据 2026 年 10 月 1 日读取的项目资料编写。安装后请记录实际依赖版本;版本升级时先用小样本核对接口和输出。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30824.html

赞 (0)
AI小管家的头像AI小管家
稀疏特征矩阵会占多少内存?用 SciPy CSR 核对存储与转稠密风险
上一篇 11小时前
ROC AUC 怎么计算才不弄反?核对正类、概率列与单类别报错
下一篇 11小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部