Python 在我的示例中,如何用枕头替换scipy.misc.imresize?
我读了一些关于早期版本中被删除的Python 在我的示例中,如何用枕头替换scipy.misc.imresize?,python,scipy,python-imaging-library,Python,Scipy,Python Imaging Library,我读了一些关于早期版本中被删除的scipy.misc.imresize,以及如何使用枕头的帖子。下面是产生错误的代码行 image_gray_resized = scipy.misc.imresize(arr=image_gray, size=fraction, interp='bicubic') 在我看到的示例中,这个语句的枕头版本只使用了两个参数,而我的使用了三个参数。我不知道我必须如何改变它,使其在枕头中工作,因为我不知道参数是如何变化的 scipy.misc.imresize(*arg
scipy.misc.imresize
,以及如何使用枕头的帖子。下面是产生错误的代码行
image_gray_resized = scipy.misc.imresize(arr=image_gray, size=fraction, interp='bicubic')
在我看到的示例中,这个语句的枕头版本只使用了两个参数,而我的使用了三个参数。我不知道我必须如何改变它,使其在枕头中工作,因为我不知道参数是如何变化的
scipy.misc.imresize(*args, **kwds)
枕头版呢
numpy.array(Image.fromarray(arr).resize())
它们是相关的。更重要的是,我自己的3参数
imresize
如何适应这一点。让我们检查一下旧的文档页面:
是图像本身作为一个NumPy数组arr
可以大小
- 一个
(表示某个百分比)int
- 一个
(表示某个分数,这是你的例子),或者浮点数
- 元组(指示目标大小)
- 一个
是要使用的插值方法interp
必须是大小
。因此,在使用上述百分比或分数时,需要事先确定目标大小元组
是重采样过滤器,它基本上是上面给出的插值方法resample
从imageio导入imread#scipy.misc.imread不推荐使用
将numpy作为np导入
从PIL导入图像#scipy.misc.imresize不推荐使用
#读取图像,获取宽度和高度
img=imread('path/to/your/image.png')
h、 w=图像形状[:2]
打印(图像形状)
# (241, 300, 3)
#分数作为浮点数
分数=0.2
img_resized=np.array(Image.fromarray(img).resize((int(分数*w))),
int(分数*h)),
图像(双三次)
打印(img_已调整大小。形状)
# (48, 60, 3)
#整数百分比
百分比=20
img_resized=np.array(Image.fromarray(img).resize((int(百分比/100*w)),
int(百分比/100*h)),
图像(双三次)
打印(img_已调整大小。形状)
# (48, 60, 3)
#大小为元组
大小=(60,48)
img_resized=np.array(Image.fromarray(img).resize(size,Image.BICUBIC))
打印(img_已调整大小。形状)
# (48, 60, 3)
该示例显示了如何处理三种不同的缩放方式(百分比、分数、目标大小)。对于不同的插值方法,您只需要从最近的
映射到PIL.Image.nearest
,依此类推
编辑:仅作进一步说明:将输入NumPy数组转换为枕头对象,这样您就可以使用
PIL.Image.resize
----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.16299-SP0
Python:3.9.1
PyCharm:2021.1.1
图像IO:2.9.0
NumPy:1.20.2
枕头:8.2.0
----------------------------------------
HansHirse有一个疑问。在最后一种方法中,您将其调整为元组大小,语句大小(60,48)是使图像为60像素乘以48像素,还是其他什么?此外,如果我使用imageio读取图像,但没有获得其原始尺寸(如W和H),它会工作吗?枕头使用(宽度、高度)
元组,而-由于NumPy数组的(默认)行主要顺序-形状
返回(高度、宽度、通道)
。因此,所有三种呈现方式都使用(60,48)
和(宽度,高度)
生成相同的图像。使用百分比或分数调整大小时,必须计算目标大小。因此,您需要原始维度。要么在NumPy数组上使用shape
,要么在Image
对象上使用andheight
。我明白了,这就是原因。