Eyp*_*ros 7 python python-imaging-library
我正在尝试找到一种方法来使用Pillow获取图像的通道数。这看似微不足道,但我找不到(简单答案)。
我知道我可以以较小的开销来解决它(有2种可能性):
array.shapeimage.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.
Run Code Online (Sandbox Code Playgroud)
(609,439)
我还发现此方法受此答案的启发(当然,这也导入了开销):
num_channel = len(image.split())
Run Code Online (Sandbox Code Playgroud)
在我看来,我真的找不到这个简单的答案。
我决定回答我自己的问题(尽管我基本上会总结@cryptonome的评论)。
好吧,关于PIL,我得到的选择是:
image.mode:返回包含读取数据模式的str。典型值是"RGB"和"L"分别用于RGB和灰度图像。模式在这里介绍。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())。
| 归档时间: |
|
| 查看次数: |
7885 次 |
| 最近记录: |