2014-11-18 3 views
0

Что хранится в массиве байтов изображения? Я работал над проектом, в котором он должен был интерпретировать то, что хранится в массиве байтов изображения. Как мы интерпретируем элементы массива байтов?Интерпретировать массив байтов изображения

Примечание: Ниже приведен код в Python для создания байтового массива

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

Как ваша программа построила массив байтов? Вы читали его из файла диска? Вы использовали библиотеку для ее создания? Был ли он передан вам каким-то внешним агентом? –

+0

@ Robᵩ Я сделал редактирование на вопрос – user3286661

+1

Интерпретация байтов файла JPEG - непростая задача, см., Например, http://en.wikipedia.org/wiki/JPEG_File_Interchange_Format и http://en.wikipedia.org/wiki/JPEG#Syntax_and_structure. Можете ли вы уточнить, что вы пытаетесь сделать? –

ответ

0

вы добавили это с питона-изображения-библиотекой, но вы не упоминаете его в любом месте в вашем вопросе, и вы не используете его.

Я очень подозреваю, что вы на самом деле хотите использовать его. Вас не интересует массив байтов, составляющих заголовок 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 
Смежные вопросы