本文主要是介绍【深度学习实战(4)】使用PIL库实现自己的letter_box操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、letter_box
深度学习模型输入图片的尺寸为正方形,而数据集中的图片一般为长方形,粗暴的resize会使得图片失真,采用letterbox可以较好的解决这个问题。该方法可以保持图片的长宽比例,剩下的部分采用灰色填充。
二、代码
本例中,模型输入尺寸为604x640,而我们读取的图片的实际尺寸为128x384,通过letter_box操作,实现将原始图像以不失真的方式调整为640x640。
from PIL import Imagedef letter_box_pil(orgin_image, target_size):orgin_image.show()orgin_w, orgin_h = orgin_image.sizetarget_w, target_h = target_size# ------------------------------------------------------------------## 以原图较长的边为准,将长边resize到target_size大小;原图较短的边, 进行等比缩放# ------------------------------------------------------------------#scale = min(target_w/orgin_w, target_h/orgin_h)new_w = int(orgin_w*scale)new_h = int(orgin_h*scale)image = orgin_image.resize((new_w,new_h), Image.BICUBIC)# ------------------------------------------------------------------## 构建输出图像# ------------------------------------------------------------------#target_image = Image.new('RGB', target_size, (128,128,128))target_image.paste(image, ((target_w-new_w)//2, (target_h-new_h)//2))target_image.show()return target_imageorgin_image = Image.open('demo.jpg')
target_size = [640, 640]
letter_box_pil(orgin_image, target_size)
运行结果
这篇关于【深度学习实战(4)】使用PIL库实现自己的letter_box操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!