Проблемы с чтением пикселей изображения из файла - PullRequest
0 голосов
/ 12 февраля 2019

Я понимаю, что в Python есть несколько способов получить все пиксели изображения, используя внешние библиотеки, такие как PIL или Image.Заинтересовавшись испытать свои бинарные навыки, я решил пойти дальше и попытаться прочитать пиксели в сыром Python с двоичными данными из файла.Это изображение, которое я использовал в качестве примера:

The image I used in my program.

Из других вопросов я понял, что мне нужно преобразовать байты в целую кучуцелые числа без знака перед обработкой.Я использовал struct.unpack, чтобы сделать это.Вот моя программа:

import struct

with open('connect.jpg', 'rb') as fp:
    data = fp.read()
    print(struct.unpack("I"*int(len(data)/4), data))

Это дает мне целую кучу сумасшедших целых чисел.Я полагал, что это были просто целые числа RGB, которые мне пришлось конвертировать, поэтому я сделал это.Несколько проблем здесь:

  • Список пикселей был только 2019, в то время как мое изображение 320x240.

  • Цвета пикселей были ужасновыкл.Я бы подумал, что первые несколько тысяч пикселей были бы близки к rgb(0,0,0), но я получал зеленый, фиолетовый, желтый, красный - все.

Для справки, воткод, который я использовал для преобразования целых чисел без знака в кортежи RGB:

def rgb_int2tuple(rgbint):
    return (rgbint // 256 // 256 % 256, rgbint // 256 % 256, rgbint % 256)

Я чувствую, что здесь я использую совершенно неправильный подход.Возможно ли не прочитать данные в нужном формате или что-то напутало с моей функцией int-to-RGB?

...