如何解决在我的例子中,如何用 Pillow 替换 scipy.misc.imresize?
我阅读了一些关于 scipy.misc.imresize
在早期版本中被删除的帖子,以及您必须如何改用 Pillow。以下是我产生错误的代码行。
image_gray_resized = scipy.misc.imresize(arr=image_gray,size=fraction,interp='bicubic')
在我看到的示例中,该语句的 Pillow 版本仅使用两个参数,而我的使用三个参数。我不知道我必须如何更改它才能使其在 Pillow 中工作,因为我不知道
中的参数如何scipy.misc.imresize(*args,**kwds)
和枕头版
numpy.array(Image.fromarray(arr).resize())
是相关的。更重要的是,我自己的 3 参数 imresize
如何适应这一点。
解决方法
让我们检查一下 scipy.misc.imresize
的旧文档页面:
-
arr
是作为 NumPy 数组的图像本身。 -
size
可以是- 一个
int
(表示某个百分比), - a
float
(表示某个分数,这是您的示例),或 - a
tuple
(表示目标大小)。
- 一个
-
interp
是要使用的插值方法。
现在,让我们检查一下 PIL.Image.resize
的功能:
-
size
必须是tuple
。因此,在使用上述百分比或分数时,您需要事先确定目标大小。 -
resample
是重采样滤波器,基本上就是上面给出的插值方法。
这就是我们需要知道的来导出正确的代码:
from imageio import imread # scipy.misc.imread is deprecated
import numpy as np
from PIL import Image # scipy.misc.imresize is deprecated
# Read image,get width and height
img = imread('path/to/your/image.png')
h,w = img.shape[:2]
print(img.shape)
# (241,300,3)
# Fraction as float
fraction = 0.2
img_resized = np.array(Image.fromarray(img).resize((int(fraction * w),int(fraction * h)),Image.BICUBIC))
print(img_resized.shape)
# (48,60,3)
# Percentage as integer
percentage = 20
img_resized = np.array(Image.fromarray(img).resize((int(percentage / 100 * w),int(percentage / 100 * h)),3)
# Size as tuple
size = (60,48)
img_resized = np.array(Image.fromarray(img).resize(size,3)
该示例显示了如何处理三种不同的缩放方式(百分比、分数、目标大小)。对于不同的插值方法,您只需要从 nearest
映射到 PIL.Image.NEAREST
,依此类推。
编辑: 仅作进一步说明:PIL.Image.fromarray
将输入的 NumPy 数组转换为 Pillow PIL.Image.Image
对象,这样您就可以完全使用 PIL.Image.resize
。
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.9.1
PyCharm: 2021.1.1
imageio: 2.9.0
NumPy: 1.20.2
Pillow: 8.2.0
----------------------------------------
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。