如何将plt.imshow输出转为PIL图像且无需本地保存?
获取plt.imshow()对应的PIL图像(无需本地保存)
我正在使用自定义库将一维(1D)信号转换为二维(2D)表示,该库内部函数通过plt.imshow()输出结果。我已得到输出,但不想将图片保存到本地,请问有没有办法获取plt.imshow()所显示内容对应的PIL图像?
可以实现,核心是提取plt.imshow()渲染的图像数据,再转换为PIL图像,无需保存到本地:
- 获取对应图像对象:通过当前绘图轴的
images属性访问plt.imshow()生成的AxesImage实例 - 提取图像数据:调用该实例的
get_array()方法获取原始数值数组 - 格式转换:将数组调整为PIL支持的格式(如uint8),再转为PIL图像
示例代码:
import matplotlib.pyplot as plt from PIL import Image import numpy as np # 调用自定义库的转换函数(内部已执行plt.imshow()) # custom_lib.convert_1d_to_2d(your_1d_signal) # 获取当前绘图轴 ax = plt.gca() # 取第一个图像对象(若有多个,替换为对应索引idx) img_obj = ax.images[0] # 提取图像数据数组 img_data = img_obj.get_array() # 处理浮点数数组:归一化到0-255并转为uint8(如果数据是浮点类型) if img_data.dtype.kind == 'f': img_data = (img_data - img_data.min()) / (img_data.max() - img_data.min()) * 255 img_data = img_data.astype(np.uint8) # 转换为PIL图像 pil_image = Image.fromarray(img_data) # 后续可直接使用pil_image,比如显示或处理 # pil_image.show()
正如@Davide_sd指出的,ax.images[idx].get_array()是检索图像数据的关键方法。
内容的提问来源于stack exchange,提问作者PiEmmeC
相关产品推荐
相关产品推荐

