解释图像的字节数组

时间:2014-11-18 21:05:15

标签: python c++ bytearray python-imaging-library

什么存储在图像的字节数组中? 我正在开发一个项目,在该项目中需要解释存储在图像的字节数组中的内容。 我们如何解释字节数组的元素?

注意: 以下是python中用于生成字节数组的代码

from array import array
f = open("temp.jpg", "rb")
bytes = bytearray(f.read())

1 个答案:

答案 0 :(得分:0)

您已使用python-imaging-library对此进行了标记,但您在问题的任何位置都没有提及它,而且您还没有使用它。

我强烈怀疑你实际上希望使用它。您对构成JFIF标头,压缩图像数据,EXIF段等的字节数组不感兴趣;你想要一个像素值数组

因此,首先必须安装Python映像库。现代版本的名称为Pillow,文档有完整的安装说明,但通常只有pip install pillow

现在,您可以在脚本中使用它:

>>> from PIL import Image
>>> img = Image.open("temp.jpg")
>>> img.mode
'RGB'
>>> img.getpixel((0, 0))
(3, 148, 231)

Image对象已经类似于数组了。 mode让我知道这是一个8位RGB图像,因此每个像素将有3个值 - 红色,绿色和蓝色强度,从0到255.而getpixel((0, 0))会将红色返回给我左上角像素的绿色,蓝色和蓝色值。

如果你真的想要一个平面阵列,你也可以这样做:

>>> img.getdata()[0]
(3, 148, 231)

或者,如果你想要一个扁平的字节数组(交替红 - 蓝 - 绿 - 红 - 蓝 - 绿)而不是元组:

>>> img.getbytes()[0]
3