如何查看图片的频道顺序?

Mat*_*ith 5 python numpy image colors python-imaging-library

将图像加载到Python中,如下所示,我如何知道通道的顺序?(例如BGR或RGB)

from PIL import Image
import numpy as np

image_pil = Image.open("Stonehenge.jpg")
image_np = np.array(image_pil)
image_np[0][0]
Run Code Online (Sandbox Code Playgroud)

结果

array([ 52, 123, 155], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)

具体问题

我如何知道52红色通道,蓝色通道还是其他通道?或者这个问题在概念层面上没有意义吗?


笔记

在一个类似的Java而不是Python的问题中,一个人声称:

如果您正在读取图像文件,或者您可以访问读入该文件的代码,请知道它是:

  • BGR命令,如果你使用cv2.imread(),
  • RGB命令,如果你使用mpimg.imread(),(假设导入matplotlib.image为mpimg)

如果您不知道文件是如何打开的,则接受的答案BufferedImage非常适合Java.

wim*_*wim 7

由于您使用PIL并且未指定任何其他模式来加载Image,因此您将获得RG B.

您可以通过检查Image实例上的"mode"属性来验证:

image_pil.mode   # should return the string 'RGB'
Run Code Online (Sandbox Code Playgroud)

Pillow通过image_pil.__array_interface__魔术方法支持数组接口,所以当你创建ndarray numpy时就是使用它.也就是说,它对颜色通道顺序一无所知.如果你有一个存储为BGR的图像文件,并且像这样加载它,你将在红色通道中获得蓝色数据,反之亦然,当你显示它时看起来会出错.