gpt4 book ai didi

python - pil(枕头)图像中的 channel 数

转载 作者:行者123 更新时间:2023-12-04 07:31:11 25 4
gpt4 key购买 nike

我正在尝试找到一种使用 Pillow 获取图像 channel 数的方法。这似乎相当微不足道,但我找不到它(简单的答案)。
我知道我可以用一个很小的开销来解决它,比如(2种可能性):

  • 转换为 numpy 并检查 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反对 LRGB字符串来查找图像是否为灰度或 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com