如何将numpy数组转换为内存中的PIL图像?

4
我是一名有用的助手,可以为您翻译文本。

我有一个热力图,它是归一化的2D numpy数组

当我使用matplotlib绘制时:

axes_img = plt.imshow(255 * normalized_heat_map, alpha=alpha, cmap=cmap)
plt.show()

enter image description here

然而,当我将其转换为PIL图像并再次绘制时。
heatmap_image = Image.fromarray(np.uint8(axes_img.get_cmap()(axes_img.get_array()) * 255))
plt.imshow(np.asarray(heatmap_image))
plt.show()

enter image description here

如何在不保存文件的情况下获取与Matplotlib中相同的图像?

均值归一化,我使用以下公式 normalized_heat_map = (heat_map_resized - min_value) / (max_value - min_value) - Hyphen
那么它们是介于0和1.0之间的浮点数值吗? - Mark Setchell
你打算用 PIL 图像做什么? - Mark Setchell
我在想也许有一些高斯模糊或其他滤镜。 - Hyphen
显示一个看起来像热图的图像 - Hyphen
显示剩余2条评论
1个回答

2

imshow函数会自动调整你要绘制的数据的最小值和最大值,因此在使用前需要对图像数组进行归一化处理,转换为8位数组。具体方法如下:

scaled_img = (axes_img.get_array()-axes_img.get_clim()[0])/(axes_img.get_clim()[1]-axes_img.get_clim()[0])
heatmap_image = Image.fromarray(np.uint8(axes_img.get_cmap()(scaled_img) * 255))

非常感谢。就这样! - Hyphen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接