Python 使用PIL resize替换scipy.misc.imresize的正确方法

Python 使用PIL resize替换scipy.misc.imresize的正确方法,python,scipy,python-imaging-library,image-resizing,resize-image,Python,Scipy,Python Imaging Library,Image Resizing,Resize Image,我继承了一个遗留代码,由于scipy中的更新,我现在必须将scipy.misc.imresize替换为PIL.Image.resize 这是原始代码 # xn.shape = (519, 20) xnr = scipy.misc.imresize(xn, (200, xn.shape[1])) # xnr.shape = (200, 20) i think ? SomeOtherArray[i, :] = xnr.flatten() 按照建议,我应该调用np.array(Image.froma

我继承了一个遗留代码,由于scipy中的更新,我现在必须将
scipy.misc.imresize
替换为
PIL.Image.resize

这是原始代码

# xn.shape = (519, 20)
xnr = scipy.misc.imresize(xn, (200, xn.shape[1]))
# xnr.shape = (200, 20) i think ?
SomeOtherArray[i, :] = xnr.flatten()
按照建议,我应该调用
np.array(Image.fromarray(arr.resize())

问题1:
xnr=scipy.misc.imresize(xn,(200,xn.shape[1])
给出了
(200,20)


问题2:我如何使它在使用PIL后,xnr是正确的,正如先前在原始代码中预期的那样

由于Numpy和PIL之间的维度顺序不同,这有点令人困惑

PIL中的图像具有大小
(宽度、高度)

但是,表示图像的Numpy数组具有形状
(高度、宽度)

以下代码片段说明了这一点:

import numpy as np
from numpy import random
from PIL import Image
import matplotlib.pyplot as plt

random.seed()
xn = random.randint(0, 255, (539,20), dtype=np.uint8)

im = Image.fromarray(xn)

print(im.size)

plt.imshow(im, cmap='gray', vmin=0, vmax=255)
plt.show()
因此,当调用
Image.fromarray(xn)
时,您会看到一幅20宽x 539高的图片

现在
Image.fromarray(xn).resize((200,xn.shape[1])
是一张200宽x20高的图片,通过将原始539高度缩小到20,并将原始20宽度拉伸到200来获得

如果要保持原来的20宽度,并将539高度缩小到200,应执行以下操作:

Image.fromarray(xn).resize((xn.shape[1],200))

相比之下,
scipy.misc.imresize(xn,(200,20))
返回一个具有形状
(200,20)
的数组,如文档中所述:

大小:int、float或tuple

  • int-当前大小的百分比

  • 浮动-当前大小的分数

  • 元组-输出图像的大小(高度、宽度)


由于Numpy和PIL之间的尺寸顺序不同,这有点令人困惑

PIL中的图像具有大小
(宽度、高度)

但是,表示图像的Numpy数组具有形状
(高度、宽度)

以下代码片段说明了这一点:

import numpy as np
from numpy import random
from PIL import Image
import matplotlib.pyplot as plt

random.seed()
xn = random.randint(0, 255, (539,20), dtype=np.uint8)

im = Image.fromarray(xn)

print(im.size)

plt.imshow(im, cmap='gray', vmin=0, vmax=255)
plt.show()
因此,当调用
Image.fromarray(xn)
时,您会看到一幅20宽x 539高的图片

现在
Image.fromarray(xn).resize((200,xn.shape[1])
是一张200宽x20高的图片,通过将原始539高度缩小到20,并将原始20宽度拉伸到200来获得

如果要保持原来的20宽度,并将539高度缩小到200,应执行以下操作:

Image.fromarray(xn).resize((xn.shape[1],200))

相比之下,
scipy.misc.imresize(xn,(200,20))
返回一个具有形状
(200,20)
的数组,如文档中所述:

大小:int、float或tuple

  • int-当前大小的百分比

  • 浮动-当前大小的分数

  • 元组-输出图像的大小(高度、宽度)