【Atlas200】使用Mindx v2接口(C++)完成letterbox,等长宽比缩放后padding操作

本文介绍了Letterbox在深度学习中用于保持纵横比的重要性,详细阐述了如何用Python进行Letterbox操作,包括创建空白图片、计算缩放比例、缩放图像并填充到空白图片。接着,文章讨论了使用Mindx v2 C++接口来完成同样的Letterbox处理,以及一种可选的缩放方式。最后展示了原图和经过Letterbox处理后的效果。
摘要由CSDN通过智能技术生成

letterbox介绍

在深度学习中,图像的尺寸对于模型的训练和推理十分重要。为了保持输入图像的纵横比例,避免因缩放导致的失真,通常会对图像进行裁剪或嵌入(padding)操作。其中,letterbox是一种常用的嵌入操作,其主要思想是在图像周围添加黑色边框,使图像的尺寸与模型的期望输入尺寸一致。通过这种方式,输入图像可以被缩放到模型的期望输入大小,而不会破坏图像的纵横比例。因此,letterbox可以有效地提高模型的训练和推理性能,同时保持图像的视觉质量。在训练阶段,letterbox还可以避免因图像尺寸不一致导致的batch样本大小不一致问题。在实际应用中,letterbox通常被用于目标检测、人脸识别等深度学习任务中。

使用python完成letterbox

这段代码是对输入图片进行预处理,具体步骤如下:

1.根据输入图片的通道数,创建一个与模型输入大小相同的空白图片padding_image。

2.计算原图与模型输入大小之间的缩放比例ratio,并将原图按照该比例进行缩放,得到缩放后的图片resized_img。

3.将缩放后的图片resized_img覆盖到空白图片padding_image的左上角位置,并将padding_image按照指定的通道顺序swap进行转置。(变成行优先的连续的内存块)注意,这里的python版本是将裁剪后的图片贴到了背景图的左上角。

4.将转置后的padding_image转换为dtype为float32的numpy数组,并返回该数组和缩放比例ratio。

import numpy as np
import cv2

GRAY = 114

def preproc(img, img_size, swap=(2, 0, 1)):
    """Resize the input image."""
    if len(img.shape) == 3:
        padding_image = np.ones((img_size[0], img_size[1], 3), dtype=np.uint8) * GRAY
    else:
        padding_image = np.ones(img_size, dtype=np.uint8) * GRAY

    ratio = min(img_size[0] / img.shape[0], img_size[1] / img.shape[1])
    resized_img = cv2.resize(
        img,
        (int(img.shape[1] * ratio), int(img.shape[0] * ratio)),
        interpolation=cv2.INTER_LINEAR,
    ).astype(np.uint8)
    padding_image[: int(img.shape[0] * ratio), : int(img
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值