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

运行结果

相关推荐
夏同学Xavi5 分钟前
skls-mgr:统一管理 Agent Skills 的 CLI 工具
人工智能·程序员·命令行
梦醒过后说珍重9 分钟前
【超分实战】拒绝灾难性遗忘!记一次原生4K医疗影像(SurgiSR4K)的模型微调踩坑实录
深度学习
天青色等烟雨099 分钟前
Skill的终局:不是被生成,而是能进化
人工智能·agent
FPGA-ADDA12 分钟前
第四篇:嵌入式系统常用通信接口详解(I2C、SPI、UART、RS232/485、CAN、USB)
人工智能·单片机·嵌入式硬件·fpga开发·信息与通信
智算菩萨16 分钟前
【How Far Are We From AGI】7 AGI的七重奏——从实验室到现实世界的应用图景与文明展望
论文阅读·人工智能·ai·agi·感知
一招定胜负25 分钟前
从 TXT 到 CSV 再到 Flask 部署:语音转写 AI 总结全流程实战
人工智能
梦醒过后说珍重26 分钟前
拒绝显存溢出!手把手教你写原生 4K 超分辨率数据集 (SurgiSR4K) 的 PyTorch DataLoader
深度学习
数字供应链安全产品选型35 分钟前
#AI原生安全,Gartner 点名之后:AIST 技术正在进入深水区
大数据·人工智能
liukuang11036 分钟前
阿里Q3财报:全栈AI驱动下的价值重构
人工智能·重构
landuochong2001 小时前
claude增加自动化日历提醒功能,并同步到iphone日历
人工智能·iphone·claudecode