【深度学习实战(5)】使用仿射变换来实现自己的letter_box操作

一、letter_box

深度学习模型输入图片的尺寸为正方形,而数据集中的图片一般为长方形,粗暴的resize会使得图片失真,采用letterbox可以较好的解决这个问题。该方法可以保持图片的长宽比例,剩下的部分采用灰色填充。

二、代码

本例中,模型输入尺寸为604x640,而我们读取的图片的实际尺寸为128x384,通过letter_box操作,实现将原始图像以不失真的方式调整为640x640。

cpp 复制代码
import cv2
import numpy as np

def letter_box_cv(image, target_size):
    cv2.imshow('image', image)
    cv2.waitKey()
    dst_w, dst_h = target_size
    scale = min(dst_h / image.shape[0], dst_w / image.shape[1])  # [0]=height [1]=width
    ox = (-scale * image.shape[1] + dst_w + scale - 1) * 0.5
    oy = (-scale * image.shape[0] + dst_h + scale - 1) * 0.5
    M = np.array([[scale, 0, ox], [0, scale, oy]], dtype=np.float32)
    IM = cv2.invertAffineTransform(M)
    image_out = cv2.warpAffine(image, M, (dst_w, dst_h), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT,
                               borderValue=(114, 114, 114))
    cv2.imshow('image_out', image_out)
    cv2.waitKey()
    return image_out, M, IM

orgin_image = cv2.imread('demo.jpg')
target_size = [640, 640]
letter_box_cv(orgin_image, target_size)

运行结果

相关推荐
汗流浃背了吧,老弟!6 小时前
BPE 词表构建与编解码(英雄联盟-托儿索语料)
人工智能·深度学习
软件聚导航6 小时前
从 AI 画马到马年红包封面,我还做了一个小程序
人工智能·chatgpt
啊森要自信6 小时前
CANN ops-cv:AI 硬件端视觉算法推理训练的算子性能调优与实战应用详解
人工智能·算法·cann
要加油哦~6 小时前
AI | 实践教程 - ScreenCoder | 多agents前端代码生成
前端·javascript·人工智能
玄同7656 小时前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
新缸中之脑6 小时前
用RedisVL构建长期记忆
人工智能
J_Xiong01176 小时前
【Agents篇】07:Agent 的行动模块——工具使用与具身执行
人工智能·ai agent
SEO_juper6 小时前
13个不容错过的SEO技巧,让您的网站可见度飙升
人工智能·seo·数字营销
小瑞瑞acd6 小时前
【小瑞瑞精讲】卷积神经网络(CNN):从入门到精通,计算机如何“看”懂世界?
人工智能·python·深度学习·神经网络·机器学习
CoderJia程序员甲7 小时前
GitHub 热榜项目 - 日榜(2026-02-06)
人工智能·ai·大模型·github·ai教程