[英]Number of channels in pil (pillow) image
我正在尝试找到一种使用 Pillow 获取图像通道数的方法。 这似乎相当微不足道,但我找不到它(简单的答案)。
我知道我可以用一些小的开销来解决这个问题(2 种可能的想法):
array.shape
image.size[0]*image.size[1]
对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.
(609, 439)
我还发现这种方法受到这个答案的启发(当然这也导入了开销):
num_channel = len(image.split())
对我来说,这似乎很奇怪,我找不到这个简单的答案。
我决定回答我自己的问题(虽然我基本上会总结@cryptonome 的评论)。
好吧,当涉及到 PIL 时,我得到的选项是:
image.mode
:返回包含读取数据模式的 str 。 RGB 和灰度图像的典型值为"RGB"
和"L"
。 此处介绍了模式。im2.info
:它返回一个包含有关图像的各种信息的字典。 这是特定于图像格式的。 例如,对于 jpg 图像,它(可能)包含带有键的字段: dpi
、 jfif
、 jfif_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())
更安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.