前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python - 将matplotlib图像转换为numpy.array 或 PIL.Image

Python - 将matplotlib图像转换为numpy.array 或 PIL.Image

作者头像
为为为什么
发布2022-08-04 15:08:26
1.7K0
发布2022-08-04 15:08:26
举报
文章被收录于专栏:又见苍岚

matplotlib是python图像处理中让人又爱又恨的库。最近遇到了需要获取plt图像数据的需求,本文记录了将matplotlib图像转换为numpy.array 或 PIL.Image的方法。

众所周知,这个库处理图像会出现内存泄漏的问题,原想着将plt的图转出来用opencv存就好了,然而并没有,牢骚完毕。

转换思路

总体分为两步完成目标:

  • 将plt或fig对象转为argb string的对象
  • 将argb string对象图像转为array 或 Image

步骤一

区分对象为plt和fig的情况,具体使用哪种根据对象类型确定

转换plt对象为argb string编码对象

代码在plt对象中构建了图像内容,生成了plt图像,但还没有savefig 和 show: 例如:

代码语言:javascript
复制
plt.figure()
plt.imshow(img)
代码语言:javascript
复制
# 引入 FigureCanvasAgg
from matplotlib.backends.backend_agg import FigureCanvasAgg
# 引入 Image
import PIL.Image as Image
# 将plt转化为numpy数据
canvas = FigureCanvasAgg(plt.gcf())
# 绘制图像
canvas.draw()
# 获取图像尺寸
w, h = canvas.get_width_height()
# 解码string 得到argb图像
buf = np.fromstring(canvas.tostring_argb(), dtype=np.uint8)

转换fig对象为argb string编码对象

以 matplotlab 的 fig 对象为目标,获取 argb string编码图像

代码语言:javascript
复制
# 引入 Image
import PIL.Image as Image
# 绘制图像
fig.canvas.draw()
# 获取图像尺寸
w, h = fig.canvas.get_width_height()
# 获取 argb 图像
buf = np.fromstring(fig.canvas.tostring_argb(), dtype=np.uint8)

步骤二

转换argb string编码对象为PIL.Image或numpy.array图像

此时的argb string不是我们常见的uint8 w h rgb的图像,还需要进一步转化

代码语言:javascript
复制
# 重构成w h 4(argb)图像
buf.shape = (w, h, 4)
# 转换为 RGBA
buf = np.roll(buf, 3, axis=2)
# 得到 Image RGBA图像对象 (需要Image对象的同学到此为止就可以了)
image = Image.frombytes("RGBA", (w, h), buf.tostring())
# 转换为numpy array rgba四通道数组
image = np.asarray(image)
# 转换为rgb图像
rgb_image = image[:, :, :3]

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年11月6日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 转换思路
  • 步骤一
    • 转换plt对象为argb string编码对象
      • 转换fig对象为argb string编码对象
      • 步骤二
        • 转换argb string编码对象为PIL.Image或numpy.array图像
        • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档