2016-10-04 2 views
0

У меня есть большой двумерный список целочисленного значения. Каждое значение представляет собой пиксель и должно соответствовать цвету, но, очевидно, аналогичное значение должно иметь одинаковый цвет. Вот пример моего списка:Как сохранить двумерный список изображения в python?

list=[[0,10,3,9,23,0], [7,0,0,0,0,10], [12,1,2,7,11,12], [0,0,0,34,1,9]] 

«список» - это прямоугольник из 4 строк, и каждая строка имеет 6 столбцов. 0 значение должно соответствовать ни одному цвету, в другом слове 0 значение является прозрачным. Я пытаюсь использовать PIL, но я не получил правильного результата. Вот код теста:

from PIL import Image 

list=[[0,10,3,9,23,0], [7,0,0,0,0,10], [12,1,2,7,11,12], [0,0,0,34,1,9]] 
new=Image.new("P", (4,6)) 
new.putdata(list) 
new.save('test.tif') 

ответ

0

Причиной для отказа является во new.putdata(list), который ожидает объект последовательности (я предполагаю 2D-массив не учитывается в качестве объекта последовательности).

Исправление состоит в том, чтобы преобразовать 2D-массив в 1D-массив. Одним из примеров того, как сделать это:

sequence = [list[x][y] for x in range(len(list)) for y in range(len(list[0]))] 

Так следующий код должен работать правильно:

from PIL import Image 

list=[[0,10,3,9,23,0], [7,0,0,0,0,10], [12,1,2,7,11,12], [0,0,0,34,1,9]] 
new=Image.new("P", (6,4)) 
sequence = [list[x][y] for x in range(len(list)) for y in range(len(list[0]))] 
new.putdata(sequence) 
new.save('test.tif') 
+0

Что-то не так с вашим кодом. Если вы видите результат, «test.tif» представляет собой прямоугольник 4 столбца песка 6 строк. Правильный результат должен быть прямоугольником 6 столбцов и 4 строки. – lausent

+0

new = Image.new ("P", (6,4)) является правильным. Во всяком случае, есть еще одна проблема, и это колор. С этим соглашением вы имеете серый цвет шкалы (от черного до белого). Как можно получить другой цвет? Я не знаю что-то вроде: низкий синий цвет цвета, после зеленого цвета, после желтого и красного цвета для высокого значения (например, градиент) – lausent

Смежные вопросы