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

如何用PyTorch固定图像高度并保持宽高比进行Resize?

解决方案:用Lambda变换封装自定义固定高度缩放逻辑

torchvision确实没有直接提供「固定高度并保持比例」的内置Resize选项,但可以用torchvision.transforms.Lambda把自定义缩放逻辑包装成标准变换,这样就能和其他变换组合成Compose,完全不用在Dataset的__getitem__里写额外代码。

具体实现代码

from torchvision import transforms

target_height = 32

# 定义固定高度缩放的Lambda变换
fixed_height_resize = transforms.Lambda(
    lambda img: transforms.Resize(
        (target_height, int(img.width * (target_height / img.height)))
    )(img)
)

# 组合成完整的变换链(示例)
transform = transforms.Compose([
    fixed_height_resize,
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

逻辑说明

  • 对于输入图像img,先计算新宽度:新宽度 = 原宽度 * (目标高度 / 原高度),确保宽高比完全保留
  • 把计算好的(target_height, 新宽度)传入Resize,直接得到固定高度的输出
  • Lambda变换是torchvision的标准组件,能无缝融入变换组合,完全符合你想要的「优雅集成」需求

验证你的示例

  • 图像1:64x200(HxW)→ 新宽度=200*(32/64)=100 → 输出32x100,和预期一致
  • 图像2:200x64(HxW)→ 新宽度=64*(32/200)=10.24 → 取整为10 → 输出32x10,完全匹配你的需求

额外提示

如果需要对宽度做取整优化(比如取偶数),可以调整计算逻辑,比如把int()改成round()或者自定义取整规则,Lambda里的逻辑可以灵活修改,不影响变换链的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:52:36