Я создал массив таким образом:
import numpy as np
data = np.zeros( (512,512,3), dtype=np.uint8)
data[256,256] = [255,0,0]
Я хочу, чтобы это отображало одну красную точку в центре изображения 512x512. (По крайней мере, для начала ... я думаю, что я могу выяснить остальное оттуда)
Ответы:
Вы можете использовать PIL для создания (и отображения) изображения:
источник
(w,h,3)
, но так и должно быть(h,w,3)
, потому что индексирование в PIL отличается от индексирования в numpy. Есть связанный вопрос: stackoverflow.com/questions/33725237/…(h,w,3)
. (Теперь это зафиксировано выше.) Длина первой оси может рассматриваться как количество строк в массиве, а длина второй оси - как число столбцов. Так что(h, w)
соответствует массиву «высота»h
и «ширина»w
.Image.fromarray
преобразует этот массив в изображение высотыh
и шириныw
.img.show()
не работайте в ноутбуке ipython.img_pil = Image.fromarray(img, 'RGB') display(img_pil.resize((256,256), PIL.Image.LANCZOS))
Следующее должно работать:
Если вы используете Jupyter notebook / lab, используйте эту встроенную команду перед импортом matplotlib:
источник
plt.gray()
один раз вызвать код, чтобы переключить все последующие графики в градации серого. Не то, что хочет ОП, но все же полезно знать.squeeze()
чтобы устранить третье измерение:plt.imshow(data.squeeze())
Кратчайший путь для использования
scipy
, как это:Для этого также необходимо установить PIL или подушку.
Аналогичный подход, также требующий PIL или Pillow, но который может вызвать другого зрителя :
источник
scipy.misc.imshow(data)
.toimage
устарела в scipy-1.0.0 и удалена в 1.2.0 в пользу Pillow'sImage.fromarray
.Используя pygame , вы можете открыть окно, получить поверхность в виде массива пикселей и манипулировать оттуда как хотите. Однако вам нужно будет скопировать ваш массив NumPy в массив Surface, что будет намного медленнее, чем выполнение реальных графических операций на самих поверхностях Pygame.
источник
Как показать изображения, хранящиеся в массиве с примерами (работает в блокноте Jupyter)
Я знаю, что есть более простые ответы, но этот даст вам понимание того, как изображения на самом деле тонут из массива.
Пример загрузки
Показать массив одного изображения
Создайте пустые 10 x 10 участков для визуализации 100 изображений
Построение 100 изображений
Результат:
Что делает
axes.flat
? Он создает нумерованный перечислитель, чтобы вы могли выполнять итерации по оси, чтобы рисовать на них объекты. Пример:источник
Используя подушку fromarray, например:
источник
Imaging Library Python может отображать изображения с помощью Numpy массивов. Взгляните на эту страницу для примера кода:
РЕДАКТИРОВАТЬ: Как указано в примечании внизу этой страницы, вы должны проверить последние заметки о выпуске, которые делают это намного проще:
http://effbot.org/zone/pil-changes-116.htm
источник
Дополнение для этого с matplotlib. Мне показалось удобным делать задачи компьютерного зрения. Допустим, вы получили данные с dtype = int32
источник