我有一个.png图像,包含三个灰度值。它包含黑色(0)、白色(255)和灰色(128)斑点。我想将此图像调整为较小的大小,同时只保留这三个灰度值。目前,我正在使用scipy.misc.imresize来做这件事,但我注意到,当我减少大小,边缘变得模糊,现在包含超过3个灰度值。有谁知道如何在python中做到这一点吗?
scipy.misc.imresize
ma8fv8wu1#
在the docs for imresize中,注意interp关键字参数:
imresize
interp
interp : str, optional Interpolation to use for re-sizing (‘nearest’, ‘lanczos’, ‘bilinear’, ‘bicubic’ or ‘cubic’).
默认为bilinear过滤;切换到nearest,它将使用最近的现有像素的确切颜色,这将保留您的精确灰度值,而不是试图在它们之间进行线性插值。
bilinear
nearest
q3qa4bjr2#
我相信PIL.Image.resize正是你想要的。看看文档。基本上你需要的是:
PIL.Image.resize
from PIL import Image im = Image.open('old.png') # The Image.NEAREST is the default, I'm just being explicit im = im.resize((im.size[0]/2, im.size[1]/2), Image.NEAREST) im.save('new.png')
实际上,你几乎可以用scipy.misc.imresize来做这件事,看看它的文档。interp参数是你所需要的。如果你把它设置为nearest,图像颜色不会受到影响。
2条答案
按热度按时间ma8fv8wu1#
在the docs for
imresize
中,注意interp
关键字参数:默认为
bilinear
过滤;切换到nearest
,它将使用最近的现有像素的确切颜色,这将保留您的精确灰度值,而不是试图在它们之间进行线性插值。q3qa4bjr2#
我相信
PIL.Image.resize
正是你想要的。看看文档。基本上你需要的是:
实际上,你几乎可以用
scipy.misc.imresize
来做这件事,看看它的文档。interp
参数是你所需要的。如果你把它设置为nearest
,图像颜色不会受到影响。