Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么调整图像大小会导致频道增加?_Python_Image_Resize_Grayscale_Channels - Fatal编程技术网

Python 为什么调整图像大小会导致频道增加?

Python 为什么调整图像大小会导致频道增加?,python,image,resize,grayscale,channels,Python,Image,Resize,Grayscale,Channels,我有不同维度的灰度图像,所以我需要将它们转换为相同维度(比如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) 下面的代码显示了不

我有不同维度的灰度图像,所以我需要将它们转换为相同维度(比如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)

我不需要最后一个维度。这是怎么回事?即使使用“从resizeimage导入resizeimage”,我也会得到类似的结果。

您的代码存在许多问题


如果你希望看到灰度图像,请确保得到的是灰度图像。因此,改变这一点:

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


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

  • 最近的
  • PIL.Image.BOX
  • 双线性
  • 比尔哈明
  • PIL.Image.BICUBIC
  • 皮尔·Image.LANCZOS
因此,您需要将
ANTI_别名
替换为这一行上面列表中的内容:

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

当您保存为PNG时,它总是少丢失。质量因子的工作原理与JPEG图像的工作原理不同,因此您应该忽略它,除非您很好地了解它如何影响PNG编码器



如果你做出这些改变,特别是第一个,我认为你的问题会消失。请记住,PNG编码器可能拍摄RGB图像并将其保存为托盘图像,也可能拍摄灰度图像并将其编码为RGB或RGB alpha。

请共享您的图像。谢谢标记!感谢您的解决方案和及时回复。没错,第一部分解决了这个问题,即通过添加.convert('L')。我早些时候尝试过这个,但错误的是。convert(“LA”)。酷-很高兴它对你有用。祝你的项目好运。谢谢你,马克·塞切尔!即使我这样做,我也会得到4个通道:img=Image.open(路径到img);img=img.resize((512,512))。
image = image.resize((28, 28), Image.ANTIALIAS)