【深度学习实战(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)

运行结果

相关推荐
心疼你的一切几秒前
三维创世:CANN加速的实时3D内容生成
数据仓库·深度学习·3d·aigc·cann
小羊不会打字3 分钟前
探索 CANN 生态:深入解析 `ops-transformer` 项目
人工智能·深度学习·transformer
哈__4 分钟前
CANN加速多模态融合推理:跨模态对齐与特征交互优化
人工智能·交互
红迅低代码平台(redxun)4 分钟前
构建企业“第二大脑“:AI低代码平台如何打造智能知识中枢?
人工智能·低代码·ai agent·ai开发平台·智能体开发平台·红迅软件
Loo国昌5 分钟前
【大模型应用开发】第六阶段:模型安全与可解释性
人工智能·深度学习·安全·transformer
乾元8 分钟前
终端安全(EDR):用深度学习识别未知勒索软件
运维·人工智能·网络协议·安全·网络安全·自动化·安全架构
深鱼~10 分钟前
构建高效Transformer模型:ops-transformer算子使用手册
人工智能·深度学习·transformer·cann
人工智能AI技术12 分钟前
AI编程工具测评:2026年该选Copilot、Cursor还是免费开源方案?
人工智能
心疼你的一切14 分钟前
药物发现革命:CANN加速的AI分子生成与优化系统
数据仓库·人工智能·深度学习·aigc·cann
jackzzb12345616 分钟前
2026年专注大模型应用的AI创业公司盘点与选择指南
大数据·人工智能