在 python PIL 中使用三次插值放大图像
upsizing images with cubic interpolation in python PIL
您好,我只是想使用三次插值将一批大小为 (a,b,3)
的图像调整为更大的大小 (c, d, 3)
(c>a, d>b)
。但是每当我一开始似乎成功调整大小后再次打开调整大小的图像时,我发现了旧的尺寸......它发生在我试验中的每张图像和每一个尺寸......任何人都可以指出我遗漏了什么吗?非常感谢!
这是我的代码:
from PIL import Image
im = Image.open("img0.jpg").convert("RGB")
im # the original size
<PIL.Image.Image image mode=RGB size=600x337 at 0x102D83450>
im.resize((800,400),Image.BICUBIC)
<PIL.Image.Image image mode=RGB size=800x400 at 0x102D834D0> # thought I was doing it right
im.save("resized.jpg")
im=Image.open("resized.jpg").convert("RGB")
im
<PIL.Image.Image image mode=RGB size=600x337 at 0x102D83490> # and the actual size seems even smaller than before!
图像大小调整不会就地发生。 return 编辑了一张调整大小的新图片,因此您必须保存它。
new_img = im.resize((800,400),Image.BICUBIC)
new_img.save("resized.jpg")
或
im.resize((800,400),Image.BICUBIC).save("resized.jpg")
方法或函数是否进行更改"in place"(这意味着没有return值可以获取和使用,None的值是returned) 或 returns 必须使用的值取决于方法或函数的创建者。您始终可以通过反复试验来解决这个问题,但更好的方法是查看文档。比如PIL/Pillow的resize()
方法,看https://pillow.readthedocs.io/en/3.4.x/reference/Image.html#PIL.Image.Image.resize
在那里你会看到函数
Returns a resized copy of this image.
这告诉您必须对 return 值执行某些操作才能保留该方法的效果。
此外,如果您转到 http://effbot.org/imagingbook/image.htm 并跳转到 resize
,您会看到它说:
resize #
im.resize(size) ⇒ image
im.resize(size, filter) ⇒ image
指向右边的"arrow"是表示方法return是一个值的符号。在本例中,它 return 是一张图片。
您好,我只是想使用三次插值将一批大小为 (a,b,3)
的图像调整为更大的大小 (c, d, 3)
(c>a, d>b)
。但是每当我一开始似乎成功调整大小后再次打开调整大小的图像时,我发现了旧的尺寸......它发生在我试验中的每张图像和每一个尺寸......任何人都可以指出我遗漏了什么吗?非常感谢!
这是我的代码:
from PIL import Image
im = Image.open("img0.jpg").convert("RGB")
im # the original size
<PIL.Image.Image image mode=RGB size=600x337 at 0x102D83450>
im.resize((800,400),Image.BICUBIC)
<PIL.Image.Image image mode=RGB size=800x400 at 0x102D834D0> # thought I was doing it right
im.save("resized.jpg")
im=Image.open("resized.jpg").convert("RGB")
im
<PIL.Image.Image image mode=RGB size=600x337 at 0x102D83490> # and the actual size seems even smaller than before!
图像大小调整不会就地发生。 return 编辑了一张调整大小的新图片,因此您必须保存它。
new_img = im.resize((800,400),Image.BICUBIC)
new_img.save("resized.jpg")
或
im.resize((800,400),Image.BICUBIC).save("resized.jpg")
方法或函数是否进行更改"in place"(这意味着没有return值可以获取和使用,None的值是returned) 或 returns 必须使用的值取决于方法或函数的创建者。您始终可以通过反复试验来解决这个问题,但更好的方法是查看文档。比如PIL/Pillow的resize()
方法,看https://pillow.readthedocs.io/en/3.4.x/reference/Image.html#PIL.Image.Image.resize
在那里你会看到函数
Returns a resized copy of this image.
这告诉您必须对 return 值执行某些操作才能保留该方法的效果。
此外,如果您转到 http://effbot.org/imagingbook/image.htm 并跳转到 resize
,您会看到它说:
resize #
im.resize(size) ⇒ image
im.resize(size, filter) ⇒ image
指向右边的"arrow"是表示方法return是一个值的符号。在本例中,它 return 是一张图片。