首页 > 解决方案 > 如何在 python(scikit、numpy、pill)中缩放(重新缩放)图像?

问题描述

我需要将图像放大 6 倍。但我使用了一些代码,它只能放大 1.5 倍。我还能用什么?因为如果我从 1.5 更改为 6,代码将不起作用。

from skimage.io import imread, imsave
from skimage.transform import rescale
from skimage import transform

img = imread('C:/abc.png')
imsave('img.png', img)

image_res = transform.rescale(crop, scale=1.5)
imsave('image_res.png', image_res)

标签: pythonnumpyscikit-learnpython-imaging-library

解决方案


我会使用枕头,但不要使用调整大小的方法,而是使用裁剪方法

您需要做一些数学运算才能知道在哪里裁剪图像,因为 Pillow 没有最终分辨率,裁剪需要一个 4 值元组(fromX,fromY,toX,toY)

它应该是这样的:

from PIL import Image

img = Image.open("filepath")
img.save("img.png","PNG")

zoom = 5

image_res = img.crop((((img.size[0]/2)-img.size[0]/(zoom*2)),((img.size[1]/2)-img.size[1]/(zoom*2)),((img.size[0]/2)+img.size[0]/(zoom*2)),((img.size[1]/2)+img.size[1]/(zoom*2))))

image_res.save("image_res.png","PNG")

如果您希望最终图像具有与原始图像相同的分辨率,只需在调整大小方法中使用它

from PIL import Image

img = Image.open("filepath")
img.save("img.png","PNG")

zoom = 5

image_res = img.resize((img.size[0],img.size[1]),box=(((img.size[0]/2)-img.size[0]/(zoom*2)),((img.size[1]/2)-img.size[1]/(zoom*2)),((img.size[0]/2)+img.size[0]/(zoom*2)),((img.size[1]/2)+img.size[1]/(zoom*2))))
image_res.save("image_res.png","PNG")

推荐阅读