使用Python使用Pillow调整图像大小,为什么颜色会发生变化?

时间:2015-05-30 00:16:25

标签: python image pillow

使用Image.resize()时,我遇到了一些奇怪的事情。我有两个图像,一个是另一个的裁剪版本。我一直在计算宽高比,这样我就可以用相同的因子调整两个图像的大小,然后分别调整它们的大小。

现在出于某种原因,两个图像中较大的图像调整得很好,但裁剪版本有一些颜色失真。几乎看起来图像已经略微饱和了。

以前有没有人经历过这个或知道为什么会这样?

感谢阅读。

3 个答案:

答案 0 :(得分:1)

我们真的需要看代码。

没有代码,很难确切地知道,但我经常在PIL中看到类似转换引起的颜色问题。一些python图像的东西假设数字将在[0.0 - 1.0]之间浮动,而其他人认为它们将是[0, 255]等中的整数。

我建议您使用这些类型转换来查看是否有任何有趣的事情发生:

image = image.astype(uint8)

image = image.astype(float32)

image = uint8(image)

image = float32(image)

答案 1 :(得分:0)

我还没有使用Pillow,而且我还没有看到你的图片或代码,但是让我们说你有一张分辨率为400x200的图像,并且想要将其调整为200x100,那么每个新像素都需要有一些颜色。由于新图像较小,因此必须将原始图像的颜色混合在一起以形成新颜色。因此,在每个维度中它变小两倍的情况下,每个像素的颜色将是原始像素的四个像素的平均值。类似地,如果您调整大图像,取决于如何完成,新像素可能是块状的(如放大到任何像素图像时)或平滑,这意味着它们是来自像素的一些像素插值原始图片。

答案 2 :(得分:0)

Pillow / PIL(以及大多数其他图像库)在进行大小调整/重新采样时可能不是色彩空间或伽玛感知。

以下是Pillow与此问题相关的问题: SRGB-aware image resize in Pillow

这是对http://www.ericbrasseur.org/gamma.html

的更一般性解释