Как работать с изображениями вручную в python - PullRequest
2 голосов
/ 21 февраля 2020

Я хотел знать, как я могу работать с изображениями вручную в python, т. Е. Без Pillow или openCV et c.

начальный код:

image_file = open("myFile.jpg", 'rb')
file_data = image_file.read()

integer_values_for_pixels = []
for pixel_value in file_data:
    integer_values_for_pixels.append(pixel_value)

Из этого кода Я заметил, что целочисленные значения сохраняются в списке 'integer_values_for_pixels'. Примечание: я предполагаю, что эти целочисленные значения для пикселей. Если нет, я хочу знать, что представляют собой эти целочисленные значения ... до сих пор я знаю, что это двоичные данные, где каждое из целых чисел представлено байтом в двоичном (я думаю).

Я вроде хочу узнать при открытии файла в двоичном режиме, как получить матрицу пикселей, с которой я могу выполнять операции.

Кстати, изображение, которое я использовал, было 735 * 500, глубина 24 бит и размер был 78442 байта. Как рассчитывается 78442 байта из этих предыдущих чисел?

1 Ответ

3 голосов
/ 21 февраля 2020

Изображение закодировано в некоторой кодировке в зависимости от того, какое расширение файла используется для сохранения изображения. Простой пример см. код Хаффмана . Значение пикселя никогда не сохраняется как есть, и поэтому бесполезно напрямую обращаться к байту.

Экстремальный пример

Один наиболее частый байт (ы) может быть представлен одним битом в кодировании Хаффмана (без потерь), и, следовательно, один байт может даже теоретически представлять 8 последовательных чисел. Если числа, скажем, float 64, с одним и тем же номером, повторяющимся 8 раз, 8 x 64/8 = 64 байтов можно представить одним байтом.

...