Обновленный ответ
Итак, по сути, у вас нет массива Numpy, но у вас есть список списков, в котором каждый элемент представляет собой single 24-битное число, представляющее триплет RGB RGB888.
Итак, я могу сделать представление вашего списка следующим образом:
f=[
[0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF],
[0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF],
[0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF],
[0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF],
[0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF]
]
Итак, я могу превратить его в массив Numpy из uint32элементы вроде этого:
na = np.array(f).astype(np.uint32)
А затем создайте массив RGB, который PIL будет любить использовать:
h,w = 5,10
RGB=np.zeros((h,w,3),dtype=np.uint8)
Тогда мне просто нужно сдвинуть и скопировать триплеты в нужные места:
RGB[:,:,0] = na>>16 # Take red from top
RGB[:,:,1] = (na>>8) & 0xff # Take green from middle
RGB[:,:,2] = na & 0xff # Take blue from bottom
Теперь я могу сделать изображение PIL из этого массива RGB и сохранить его на диск:
pIm = Image.fromarray(RGB).save('result.png')
Оригинальный ответ
Давайте создадимфайл тестовых данных с ImageMagick . Сначала как PNG, просто чтобы вы могли видеть это:
magick -size 640x480 gradient:magenta-yellow image.png
И теперь снова то же самое, но на этот раз для соответствия RGB888Ваш файл:
magick -size 640x480 gradient:magenta-yellow -depth 8 rgb:image.bin
Сейчас:
from PIL import Image
# Open the file and read contents into "data"
with open('image.bin','rb') as f:
data = f.read()
# Convert that into PIL Image
im = Image.frombuffer('RGB', (640, 480), data, 'raw', 'RGB', 0, 1)
# Save
im.save('result.png')
Вы также можете позволить Numpy прочитать файл и затем преобразовать результат в изображение PIL:
import numpy as np
im = Image.fromarray(np.fromfile('image.bin',dtype=np.uint8).reshape(480,640,3))
Если вы хотите проверить, что ваш двоичный файл действительно содержит то, что, как вы думаете, он содержит, вы также можете преобразовать его в PNG с помощью ImageMagick , чтобы проверить его. Допустим, вы считаете, что файл имеет ширину 640 пикселей и высоту 480 пикселей, а RGB888 можно попросить ImageMagick превратить его в PNG с:
magick -depth 8 -size 640x480 RGB:<YOURFILENAME> image.png
Или, если вы считаете, что этоодно 16-битное одноканальное серое изображение с 128-байтовым заголовком, которое вы хотите игнорировать:
magick -depth 16 -size 640x480+128 GRAY:<YOURFILENAME> image.png
Ключевые слова : необработанное, необработанное изображение, двоичный файл, изображение, обработка изображения, Python, ImageMagick, конвертировать.