Python pil(枕头)图像中的通道数
我试图找到一种方法来获得使用枕头的图像通道数。这似乎很琐碎,但我找不到(简单的答案) 我知道我可以用较小的开销来解决这个问题,比如(2种可能性):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
- 转换为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,我得到的选项是:
:返回包含读取数据模式的str。RGB和灰度图像的典型值分别为image.mode
和“RGB”
。介绍了各种模式“L”
:返回包含图像各种信息的dict。这是特定于图像格式的。例如,对于jpg图像,它(可能)包含带键的字段:im2.info
,dpi
,jfif
,jfif\u density
等。可以找到有关jpg图像的更多信息exif
:返回一个元组(甚至是一个1元素元组),其中包含数据中存在的所有不同通道。对于典型的RGB图像,这将是image.getbands()
,对于典型的灰度图像,这将是('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())