Python pil(枕头)图像中的通道数

Python pil(枕头)图像中的通道数,python,python-imaging-library,Python,Python Imaging Library,我试图找到一种方法来获得使用枕头的图像通道数。这似乎很琐碎,但我找不到(简单的答案) 我知道我可以用较小的开销来解决这个问题,比如(2种可能性): 转换为numpy并选中array.shape 对照len(image.getdata()) 所以我不是真的对找到一个有效的解决方案感兴趣,而是想用枕头来完成这个任务 我使用的代码是直截了当的: from PIL import Image image = Image.open(image_path) image.size # <- thi

我试图找到一种方法来获得使用枕头的图像通道数。这似乎很琐碎,但我找不到(简单的答案)

我知道我可以用较小的开销来解决这个问题,比如(2种可能性):

  • 转换为numpy并选中
    array.shape
  • 对照
    len(image.getdata())
所以我不是真的对找到一个有效的解决方案感兴趣,而是想用枕头来完成这个任务

我使用的代码是直截了当的:

from PIL import Image

image = Image.open(image_path)
image.size  # <- this gives the size of the image but not the channel as in numpy.

对我来说,这似乎真的很奇怪,我找不到这个简单的答案。

我决定回答我自己的问题(尽管我基本上会总结@cryptonome的评论)

好吧,说到PIL,我得到的选项是:

  • image.mode
    :返回包含读取数据模式的str。RGB和灰度图像的典型值分别为
    “RGB”
    “L”
    。介绍了各种模式
  • im2.info
    :返回包含图像各种信息的dict。这是特定于图像格式的。例如,对于jpg图像,它(可能)包含带键的字段:
    dpi
    jfif
    jfif\u density
    exif
    等。可以找到有关jpg图像的更多信息
  • image.getbands()
    :返回一个元组(甚至是一个1元素元组),其中包含数据中存在的所有不同通道。对于典型的RGB图像,这将是
    ('R','G','B')
    ,对于典型的灰度图像,这将是
    ('L',)
因此,从上面判断,我认为更简洁的方法是将
image.mode
L
RGB
字符串进行比较,以确定图像是否为灰度级,或者通道数(如本问题中)是否是主要问题,然后简单的
len(image.getbands())
就可以了


通常
len(image.mode)
将与
len(image.getbands())
一致,并可在其位置使用,但由于至少有一种模式
YCbCr
包含5个字符,但只有3个通道(3x8位像素,彩色视频格式),因此使用
len(image.getbands())更安全
我猜。

你试过图像模式吗
Image
还有
Image.info
&
Image.getbands()
所以,我想更简单的方法应该是使用
Image.mode
image.info
不是标准化的,而且
getbands()
似乎也是一种解决方法。有一个名为layers(image.layers)的属性。但是,如果你打开一个png图像,会假设有3层,而这个值并没有设置。。。我不确定这对你来说是否足够大多数时候我发现自己只是转换到我想要的通道数,所以如果我想要RGB,但图像可能是单通道调色板图像,我只使用
im=image.open(“…”).convert('RGB')
顺便问一下,你想要通道数做什么?
num_channel = len(image.split())