【图片resize】图片三种缩放方式/letterbox_image实现
文章目录
- 1 总体简介
- 2 实现效果
- 2.1 直接缩放,不怕变形
- 2.2 不变形缩放/letterbox_image
- 2.2.1 不变形缩放,两端填充灰边
- 2.2.2 不变形缩放,一端填充灰边
- 3 代码运行
1 总体简介
对图像进行预处理操作的时候,一般有两种缩放方式。
一种是直接宽、高缩放至想要的宽、高,这种方式快捷,但可能会导致图像变形
一种是等比例缩放,然后用灰色边缘填充
step1: 计算宽高缩放比例,选择较小的那个缩放系数;
step2: 计算缩放后的尺寸: 原始图片的长宽都乘以较小的缩放系数;
step3:计算短边需要填充的灰边数,将短边的两边各自填充一半的灰行即可。
2 实现效果
2.1 直接缩放,不怕变形
针对直接缩放的方式,主要代码如下,全部代码实现见最下方
new_image = image.resize((target_w, target_h), Image.BICUBIC)
2.2 不变形缩放/letterbox_image
2.2.1 不变形缩放,两端填充灰边
yolov3使用这个方案
2.2.2 不变形缩放,一端填充灰边
Yolov5使用这个方案,是Yolov5推理速度能够很快的一个trick
很多图片的长宽比不同导致缩放填充后,两端的黑边大小都不同。而如果填充的比较多,则存在信息冗余,影响推理速度。YOLOv5作者对letterbox的缩放策略进行了修改,对原图自适应的添加最少的黑边。
计算方法:
- 计算原始图片宽高与输入尺寸的缩放比例rw和rh,选取r = min(rw,rh)后把原图按r进行缩放
- 原图宽和高中一定有一边完全贴合输入尺寸,没有达到输入尺寸的一边计算与输入尺寸的差值,然后进行上下(or左右)的填充。
3 代码运行
import matplotlib.pyplot as plt
from PIL import Image# ------------------------------------------------------------------------#
# 对输入图像进行resize,他人测试发现,不用letterbox_image直接resize的效果更好
# ------------------------------------------------------------------------#
def resize_image(image, size, letterbox_image):iw, ih = image.sizew, h = size # w=200, h=300if letterbox_image:scale = min(w/iw, h/ih)nw = int(iw*scale)nh = int(ih*scale)image = image.resize((nw,nh), Image.BICUBIC)# 新建一张image,第二个参数表示尺寸,第三个参数表示颜色new_image = Image.new('RGB', size, (128,128,128)) # --------------------------------------------------------------## 不变形resize,两端填充灰边# image.paste函数表示将一张图片覆盖到另一张图片的指定位置去# a.paste(b, (50,50)) 将b的左上顶点贴到a的坐标为(50,50)的位置,# 左上顶点为(0,0), b超出a的部分会被自动舍弃# --------------------------------------------------------------## new_image.paste(image, ((w-nw)//2, (h-nh)//2)) # ---------------------------------------------------## 不变形resize,一端填充灰边# ---------------------------------------------------#new_image.paste(image, (0, 0)) else:new_image = image.resize((w, h), Image.BICUBIC)return new_imageimg_PIL = Image.open("Avatar.jpg")
# ---------------------------------------------------#
# 第二参数表示目标尺寸,第三参数表示是否使用letterbox
# ---------------------------------------------------#
img = resize_image(img_PIL, (200, 300), True) plt.imshow(img)
plt.show()
【图片resize】图片三种缩放方式/letterbox_image实现相关推荐
- Kotlin实战练习——自定义圆形图片三种实现方式
Kotlin实战练习--自定义圆形图片三种实现方式 前言 如今Kotlin越来越重要,本人也开始了Kotlin的学习.为了检测学习效果,加深学习印象,同时回顾一下以前的一些知识点,决定从写一个自定义圆 ...
- 打开桌面计算机图片,电脑桌面截图呢?三种截图方式
在日常工作的时候,经常会需要截图工具来截取一些图片用于保存,特别是有的时候,图片需要特定尺寸的时候,截图方法是最便捷的,但是很多人对电脑截图并不是很熟悉,电脑桌面截图呢?今天就给大家讲解一下三种截图方 ...
- 实现精灵图片绝对定位的三种方式(伪)
精灵图片绝对定位的三种方式(伪) 有强迫症的我为此困扰了一上午,说白了还是自己实力不够,想法总被局限. 实现结果如上图中间的为最终满意样品 整体用列表写的` 左1: 把整体看成一个背景图加上面文字: ...
- 相似图片搜索的三种算法
相似图片搜索的三种算法 想必大家都用google或baidu的识图功能,上面就是我搜索冠希哥一幅图片的结果,这种搜索的核心算法有三种,都是利用信息指纹比较,这些算法都很易懂,下面分别介绍一下: 一.平 ...
- c# pictureBox1.Image的获得图片路径的三种方法 winform
代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径: this.pictureBox2.Image=Image.FromFile("D: ...
- 如何提高图片清晰度?三种方法来帮你!
如何提高图片清晰度?图片在上传到网络后会被压缩,导致图片变得模糊.今天,我将分享三种方法,帮助您提高图片的清晰度. 方法一:使用记灵在线工具 工具地址:记灵在线工具 - 更专注于发现工具的实用性 该工 ...
- C# 三种打印方式含代码
一:C#代码直接打印pdf文件(打印质保书pdf文件) 引用: 代码注释很详细了. private void btn_pdf_Click(object sender, RoutedEventArgs ...
- png转iconfont_关于阿里图标库Iconfont生成图标的三种使用方式-新闻详情
关于阿里图标库Iconfont生成图标的三种使用方式 发布时间:2017-07-28责任编辑:朱明 浏览:1843 相信做过前端的都知道阿里巴巴矢量图标库,这是一个非常好用的添加小图标的方法,而且是完 ...
- Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
阅读目录 一.MVC与MTV 二.多对多表的创建 三.ajax,前后端传输编码格式contentType 四.批量插入数据与自定义分页器 摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端 ...
- 线程的三种创建方式以及代码实现
线程和进程的概念 一个进程可以有多个线程 程序:是指令和数据的有序集合(静态的) 进程:是执行程序的一次执行过程(动态的),是系统资源分配的单位.在操作系统中运行的程序就是进程. 通常在一个进程中可以 ...
最新文章
- android测量的三种模式
- 迁移学习之InceptionV3(159层),Xception(126层),Inception_ResNet_V2(572层)(图像识别)
- linux dry run,dry run
- Oracle递归操作
- cross--向量或矩阵的叉乘
- 简单线性回归预测实现
- C学习杂记(六)%2.0f打印输出宽度
- 修改场景默认pawn的方法
- 微软 SQL Server 2019 将免费支持 Java;Rancher Labs获2500万美元融资;腾讯云进军日本市场……...
- CVPR2019 | AlphaPose升级!上交大开源密集人群姿态估计代码
- 《精通Spring MVC 4》——1.3 start.Spring.io简介
- C#一次性删除委托中的所有方法
- Happy Birthday to You
- 对象tostring后怎么转成对象_对象出轨了怎么办?对象出轨正常处理方式
- 【VMware vSAN 7.0】5.4.2 创建 vSAN 集群—我们有软硬件解决方案
- 小米台灯突然自己亮了_除了彩屏和小爱,还有哪些升级?——小米手环4 NFC版...
- 使用ArcGIS Engine提供的命令和工具(ICommond,ITool)实现MapView操作
- mock.js使用指南
- mac下密码加密zip,暴力破解zip,生成密钥字典
- 小米4充不了电处理办法(图文)小米4不能充电的维修教程