【问题标题】:Why resizing image lead to increase in channels?为什么调整图像大小会导致通道增加?
【发布时间】:2019-07-02 09:48:28
【问题描述】:

我有不同尺寸的灰度图像,因此我需要将它们转换为相同尺寸(例如 28*28)以进行实验。我尝试使用不同的方法来做到这一点并且我能够做到,但我观察到调整图像大小会导致通道数量的增加。我是 python 和图像处理的新手,所以请帮忙。

from PIL import Image

image = Image.open('6.tif')
image = image.resize((28, 28), Image.ANTIALIAS)
image.save('6.png', 'PNG', quality=100)

然后下面的代码显示不同的维度:

import imageio

image_data = imageio.imread("6.tif").astype(float)
print(image_data.shape)

image_data = imageio.imread("6.png").astype(float)
print(image_data.shape)

结果是:

(65, 74)
(28, 28, 4)

我不需要最后一个维度。这是怎么来的?即使使用“from resizeimage import resizeimage”,我也得到了类似的结果。

【问题讨论】:

  • 请分享您的图片。

标签: python image resize grayscale channels


【解决方案1】:

您的代码存在许多问题...


如果您期待灰度图像,请确保您得到的是灰度图像。所以,改变这个:

image = Image.open('6.tif')

到:

image = Image.open('6.tif').convert('L')

当您调整图像大小时,您需要使用正确的重采样方法之一:

  • PIL.Image.NEAREST
  • PIL.Image.BOX
  • PIL.Image.BILINEAR
  • PIL.Image.HAMMING
  • PIL.Image.BICUBIC
  • PIL.Image.LANCZOS

因此,您需要将ANTI_ALIAS 替换为该行上面列表中的内容:

image = image.resize((28, 28), Image.ANTIALIAS)

当您保存为 PNG 时,它总是无损。品质因数与 JPEG 图像的工作方式不同,因此您应该忽略它,除非您对它如何影响 PNG 编码器有很好的了解。


如果您进行这些更改,特别是第一个更改,我认为您的问题将会消失。请记住,尽管 PNG 编码器可能采用 RGB 图像并将其保存为托盘图像,或者它可能采用灰度图像并将其编码为 RGB 或 RGB alpha。

【讨论】:

  • 谢谢马克!感谢您的解决方案和及时的回复。你是对的,第一部分解决了这个问题,即通过添加 .convert('L')。我之前尝试过,但错误地是 .convert("LA")。
  • 酷 - 很高兴它对你有用。祝你的项目好运。
  • 即使我这样做,我也会得到 4 个通道:img = Image.open(path_to_img); img = img.resize((512, 512)).
猜你喜欢
  • 2014-10-08
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多