1

使用Python'sPIL模块,我们可以将数字图像读入一个array整数,

from PIL import Image
from numpy import array

img = Image.open('x.jpg')
im = array(img)  # im is the array representation of x.jpg

我想知道如何PIL将图像解释为array?首先我试过这个

od -tu1 x.jpg

它确实给出了一个数字序列,但是如何PIL将彩色图像解释为 3D 数组?

简而言之,我的问题是我想知道如何在不使用任何模块的情况下获得彩色图像的数组表示PIL,如何使用 Python 完成这项工作?

4

2 回答 2

3

好吧,这取决于我要说的图像格式。

对于 .jpg,有允许读取图像的格式的完整描述。你可以在这里阅读

PIL 所做的正是您最初所做的。但随后它会按照规范读取字节,这允许它将其转换为人类可读的格式(在本例中为数组)。

JPEG 可能看起来很复杂,但如果你使用 png(没有压缩的版本),一切看起来都更简单。 例如这张图片

png 图像没有压缩

如果你打开它,你会看到类似的东西: 先前 png 图像的原始转储

您可以在顶部看到与标题相对应的几个信息。

然后你会看到所有这些零,它们是图像黑色像素的数字表示(左上角)。

如果你用 PIL 打开图像,你会得到一个大部分被 0 填充的数组。

如果您想了解更多关于第一个字节的信息,请查看png规范第 11.2.2 章。

您会看到一些字节对应于图像的宽度和高度。这就是 PIL 能够创建数组的方式:)。

希望这可以帮助 !

于 2013-01-14T13:36:55.960 回答
1

取决于颜色模式。在 PIL 中,图像存储为整数列表,所有通道在每个像素的基础上交错。

为了说明这一点:

  • 灰度图像:[pixel1, pixel2, pixel3, ...]
  • RGB:[pixel1_R,pixel1_G,pixel1_B,pixel2_R,pixel_2_G,...]
  • RBGA 等也是如此。
于 2013-01-14T13:42:51.587 回答