如何从Matplotlib中获取图像原始数据?
直接获取Matplotlib生成图像的像素数据(无需存读文件)
不用存读PNG文件,直接从Matplotlib画布中提取像素数据,能大幅提升速度。以下是修正后的实现方案,同时解决可能触发的numpy错误:
import numpy as np import matplotlib.pyplot as plt from matplotlib.transforms import IdentityTransform px = 1/plt.rcParams['figure.dpi'] # 像素转英寸 fig, ax = plt.subplots(figsize=(384*px, 128*px)) i = 756 plt.text(70, 95, "value {:04d}".format(i), color="black", fontsize=30, transform=IdentityTransform()) plt.axis('off') # 直接从画布提取数据,替代存读文件 fig.canvas.draw() # 确保画布内容已绘制完成 buf = fig.canvas.buffer_rgba() # 获取RGBA格式的像素缓冲区 rtv = np.asarray(buf) # 转换为numpy数组 # 灰度转换(注意去掉alpha通道) gray = lambda rgb: np.dot(rgb[..., :3], [0.299, 0.587, 0.114]) gray_img = gray(rtv) # 可选:关闭画布释放资源 plt.close(fig)
关键说明:
fig.canvas.draw()必须调用,确保所有绘制元素都渲染到画布上,否则提取的数据会是空的或不完整,这也是常见numpy错误的诱因之一buffer_rgba()返回的是包含alpha通道的4通道数组,灰度转换时只取前3个RGB通道即可- 转换后的
rtv数组和plt.imread()返回的PNG数据格式一致,但完全在内存中操作,速度提升显著
内容的提问来源于stack exchange,提问作者user2607207
相关产品推荐
相关产品推荐

