Сохранение imshow-подобного изображения при сохранении разрешения

у меня есть массив (n, m), который я визуализировал с matplotlib.pyplot.imshow. Я хотел бы сохранить эти данные в некотором типе растрового графического файла (например, png), чтобы:

  1. цвета являются те, которые показаны с imshow
  2. каждый элемент базового массива-это ровно один пиксель в сохраненном изображении , Что означает, что если базовый массив является (n, m) элементами, изображение-nxm пикселей. (Меня не интересует interpolation='nearest' на imshow.)
  3. нет ничего в сохраненное изображение, за исключением пикселей, соответствующих данным в массиве. (Т. е. там нет белого пространства вокруг краев, осей и т. д.)

как я могу это сделать?

Я видел некоторый код, который может сделать это, используя interpolation='nearest' и заставляя matplotlib (неохотно) отключать оси, пробелы и т. д. Однако должен быть какой-то способ сделать это более непосредственно-может быть, с Пилом? В конце концов, у меня есть основные данные. Если я могу получить значение RGB для каждого элемента базовый массив, затем я могу сохранить его с помощью PIL. Есть ли способ извлечь данные RGB из imshow? Я могу написать свой собственный код для сопоставления значений массива со значениями RGB, но я не хочу изобретать колесо, так как эта функциональность уже существует в matplotlib.

1 ответов


как вы уже догадались, нет необходимости создавать фигуру. Вам нужно сделать три шага. Нормализовать данные, применить цветовую карту, Сохранить Изображение. matplotlib предоставляет все необходимые функциональные возможности:

import numpy as np
import matplotlib.pyplot as plt

# some data (512x512)
import scipy.misc
data = scipy.misc.lena()

# a colormap and a normalization instance
cmap = plt.cm.jet
norm = plt.Normalize(vmin=data.min(), vmax=data.max())

# map the normalized data to colors
# image is now RGBA (512x512x4) 
image = cmap(norm(data))

# save the image
plt.imsave('test.png', image)

в то время как код выше объясняет отдельные шаги, вы также можете позволить imsave выполните все три шага (аналогично imshow):

plt.imsave('test.png', data, cmap=cmap)

результат (тест.png):

enter image description here