我正在尝试找到一种使用 Pillow 获取图像 channel 数的方法。这似乎相当微不足道,但我找不到它(简单的答案)。
我知道我可以用一个很小的开销来解决它,比如(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)
我还发现这种方法受到 answer 的启发。 (当然也导入开销):
num_channel = len(image.split())
对我来说,我找不到这个简单的答案似乎真的很奇怪。
最佳答案
我决定回答我自己的问题(虽然我基本上会总结@cryptonome 的评论)。
好吧,当谈到 PIL 时,我得到的选项是:
image.mode
: 返回一个包含读取数据模式的 str。典型值为 "RGB"
和 "L"
分别用于 RGB 和灰度图像。呈现模式here . im2.info
: 它返回一个包含有关图像的各种信息的字典。这是特定于图像格式的。例如,对于 jpg 图像,它(可能)包含带有键的字段:dpi
, jfif
, jfif_density
, exif
等更多关于jpg图像的信息可以找到here . image.getbands()
:它返回一个元组(甚至是一个 1 元素),其中包含数据中存在的所有不同 channel 。对于典型的 RGB 图像,这将是 ('R', 'G', 'B')
对于典型的灰度图像,('L',)
. 因此,从以上判断,我认为更简洁的方法是比较
image.mode
反对L
和 RGB
字符串来查找图像是否为灰度或 channel 数(如本问题)是否是主要问题,然后是一个简单的 len(image.getbands())
会做的工作。通常
len(image.mode)
将与 len(image.getbands())
重合并且可以在它的位置使用,但由于至少有一种模式YCbCr
它包含 5 个字符但只有 3 个 channel (3x8 位像素,彩色视频格式),使用 len(image.getbands())
更安全我猜。
关于python - pil(枕头)图像中的 channel 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52962969/