数字图像作为整数数组读取

时间:2013-01-14 13:32:50

标签: python image-processing

使用Python的{​​{1}}模块,我们可以将数字图像读取为PIL个整数,

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 如何将彩色图像解释为3D数组呢?

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

2 个答案:

答案 0 :(得分:3)

嗯,这取决于我想说的图像格式。

对于.jpg,可以完整地描述允许读取图像的格式。 您可以阅读 here

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

JPEG可能看起来很复杂,但是如果你采用png(没有压缩的版本),一切看起来都会更简单。 For example this image

png image without compression

如果你打开它,你会看到类似的东西: Raw dump of previous png image

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

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

如果使用PIL打开图像,您将获得一个大多数填充为0的数组。

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

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

希望这有帮助!

答案 1 :(得分:1)

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

为了说明这一点:

  • 灰度图像:[pixel1,pixel2,pixel3,...]
  • RGB:[pixel1_R,pixel1_G,pixel1_B,pixel2_R,pixel_2_G,...]
  • 同样适用于RBGA等等。