Numpy 在保留分辨率的同时保存类似imshow的图像
我用Numpy 在保留分辨率的同时保存类似imshow的图像,numpy,matplotlib,python-imaging-library,pillow,Numpy,Matplotlib,Python Imaging Library,Pillow,我用matplotlib.pyplot.imshow可视化了一个(n,m)数组。我想将这些数据保存在某种类型的光栅图形文件(例如png)中,以便: 颜色是用imshow 基础数组的每个元素在保存的图像中正好是一个像素——这意味着如果基础数组是(n,m)个元素,则图像是NxM个像素。(我对imshow中的interpolation='nearest'不感兴趣) 除了与数组中的数据对应的像素外,保存的图像中没有其他内容。(即边缘、轴等周围没有空白) 我该怎么做 我见过一些代码可以通过使用interp
matplotlib.pyplot.imshow
可视化了一个(n,m)数组。我想将这些数据保存在某种类型的光栅图形文件(例如png)中,以便:
imshow
imshow
中的interpolation='nearest'
不感兴趣)我见过一些代码可以通过使用
interpolation='nearest'
并强制matplotlib(勉强)关闭轴、空格等来实现这一点。但是,必须有一些更直接的方法来实现这一点——可能是使用PIL?毕竟,我有基础数据。如果我可以为基础数组的每个元素获得一个RGB值,那么我可以用PIL保存它。是否有某种方法可以从imshow
提取RGB数据?我可以编写自己的代码将数组值映射到RGB值,但我不想重新发明轮子,因为matplotlib中已经存在该功能。正如您所猜测的,不需要创建图形。基本上需要三个步骤。规范化数据,应用颜色贴图,保存图像。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
):
结果(test.png):
感谢您解释所有步骤。我可能想用
LogNorm
来代替Normalize
,并且imshow
可以将规范化函数作为参数,而imsave
显然不能。然而,你的解释会让我绕过这个限制。
plt.imsave('test.png', data, cmap=cmap)