本文汇总了几种常见的图片尺寸缩放方法(会持续更新!)
(1)利用OpenCV包中resize方法
res = cv2.resize(img,(2width,2height), fx, fy, interpolation=cv2.INTER_CUBIC)
第一个参数img要缩放的图像名,可以通过两种方法确定缩放后图片大小,第一种利用参数(2width,2height),用来直接指定缩放后的宽度和长度;第二种,利用参数fx和fy,分别指定宽度和高度的缩放比例因子。
缩放算法有最近临域插值、双线性插值、像素关系重采样和立方插值,默认方法采用双线性插值。
imgInfo = img.shape
图片对应三维矩阵,第一维对应图片的高度,第二维矩阵对应图片长度,第三维矩阵对应图片的通道数,如果图片的shape= (220, 319, 3),表示图片高度上有220个像素,长度上有319个像素,通道数为3.
height = imgInfo[0]
width = imgInfo[1]
channel = imgInfo[2]
举例:
#第一种
size = (int(width*0.3), int(height*0.5))
shrink = cv2.resize(img, size, interpolation=cv2.INTER_AREA)
# 第二种
fx = 1.6
fy = 1.2
enlarge = cv2.resize(img, (0, 0), fx=fx, fy=fy, interpolation=cv2.INTER_CUBIC)
(2)利用pillow包中Image类中的resize方法
resize(size,resample,box)
resize方法可以将原始的图像转换大小,size是转换之后的大小,resample是重新采样使用的方法,有Image.BICUBIC,PIL.Image.LANCZOS,PIL.Image.BILINEAR,PIL.Image.NEAREST等几种采样方法,默认是PIL.Image.NEAREST,box是指定的要resize的图像区域。
示例:
im_resize = im.resize((200,200))
im_resize.show()
im_resize_box = im.resize((100,100),box = (0,0,50,50))
im_resize_box.show()
(3)利用skimage包中transform类中的resize方法
示例:
from skimage import io, transform
re_img = transform.resize(crop_img, (224, 224))
第一个参数是要缩放的原图片,第二个参数是想要缩放的大小。
需要注意的是numpy包如果升级到1.16,则会出现这个错误:
ImportError: cannot import name ‘_validate_lengths’ from ‘numpy.lib.arraypad’ (C:\ProgramData\Anaconda3\lib\site-packages\numpy\lib\arraypad.py)
(4)利用matplotlib缩放图片
这个方法不太常用,直接看代码:
plt.figure(figsize=(2.24,2.24)) #设置画板大小
image = plt.imread("16d2d9a8cd6fe71c48974b24ee3ceb5.jpg") #先读入图片
plt.imshow(image)
plt.savefig('test.png', format='png', dpi=200) #保存缩放后图片
此外,像pytorch、tensorflow这些深度学习框架的前处理API也都有图像缩放方法,用起来也很方便,当然,你要愿意动手,也可以自己用numpy实现一些图像缩放算法!!!