python - 读取为整数数组的数字图像

标签 python image-processing

使用 PythonPIL 模块,我们可以将数字图像读入整数的数组

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 完成这项工作?

最佳答案

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

对于 .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 能够创建数组的方式:)。

希望对您有所帮助!

关于python - 读取为整数数组的数字图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14319397/

相关文章:

python - 来自不同(测试)文件的数据与一个文件中的所有数据如何进行编码?

algorithm - MATLAB中的相邻灰度相关性矩阵(NGLDM)

python - 如何用Python去除图像中的小物体

c# - C# 中的图像调整大小 - 确定调整大小尺寸(高度和宽度)的算法

opencv - 使用 C++ 从打开的 cv 中的图像中访问元素

python - 合并多个文件 : 1st Column (same string), 第二列(每个文件的唯一值)

python - 如何在 Matplotlib TextBox 小部件中设置光标位置?

python - 最大公约数的语法 - Python

python - 为什么在我创建新用户时 Django 用户密码没有加密?

c++ - 如何在 C++ 中调整图像大小?