Сохранение imshow-подобного изображения при сохранении разрешения
у меня есть массив (n, m), который я визуализировал с matplotlib.pyplot.imshow
. Я хотел бы сохранить эти данные в некотором типе растрового графического файла (например, png), чтобы:
- цвета являются те, которые показаны с
imshow
- каждый элемент базового массива-это ровно один пиксель в сохраненном изображении , Что означает, что если базовый массив является (n, m) элементами, изображение-nxm пикселей. (Меня не интересует
interpolation='nearest'
наimshow
.) - нет ничего в сохраненное изображение, за исключением пикселей, соответствующих данным в массиве. (Т. е. там нет белого пространства вокруг краев, осей и т. д.)
как я могу это сделать?
Я видел некоторый код, который может сделать это, используя 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):