Python: Matplotlab 的 figure转换为numpy的arrary方法
2016-08-30 20:49
393 查看
最近在写深度学习的代码的时候遇到一个问题,在python中,我们常用matplotlib库进行数据处理和分析,而对于结果,如果想要进行其他的操作,通常是希望能转换为numpy库的ndarray. 在查阅了网上很多资料后,主要有两种方法,第一种方法我试了并没有效果,但还是放在下面。
import matplotlib.pyplot as plt import numpy as np # Make a random plot... fig = plt.figure() fig.add_subplot(111) # If we haven't already shown or saved the plot, then we need to # draw the figure first... fig.canvas.draw() # Now we can save it to a numpy array. data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='') data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
思路是用matplotlib库中的canvas方法将其转换,但我在使用中发现出现全白的情况,有可能和前面的HSV处理有关,但始终找不到解决办法, 第二种方法更为简单,利用matplotlib的savefig()方法,将图片先保存在本地,再用PIL或openCV方法将图片读入,确实可用,但会发现效率太低了,尤其我是要处理视频流。一个很好的改进方法是利用StringIO方法,不是让其内容保存在本地磁盘,而是在内存是开辟一个缓冲,这样效率大大提高了。 上代码:
import matplotlib.pyplot as plt import pylab import imageio import skimage.io import cv2 from cStringIO import StringIO import PIL #申请缓冲地址 buffer_ = StringIO()#using buffer,great way! #保存在内存中,而不是在本地磁盘,注意这个默认认为你要保存的就是plt中的内容 plt.savefig(buffer_,format = 'png') buffer_.seek(0) #用PIL或CV2从内存中读取 dataPIL = PIL.Image.open(buffer_) #转换为nparrary,PIL转换就非常快了,data即为所需 data = np.asarray(dataPIL) cv2.imshow('image', data) #释放缓存 buffer_.close()
总结,实测方法二效率还是非常高的。这也是目前找到的两种比较靠谱的方法。
相关文章推荐
- python安装numpy、scipy和matplotlib等whl包的方法
- ubuntu14 python2.7上安装scipy,numpy,matplotlib的方法
- 为python安装numpy和matplotlib等模块的方法
- Python.Mac中Pycharm软件下的Python安装库方法(包括opencv,numpy,matplotlib等)
- Python使用matplotlib,numpy,scipy进行散点的平滑曲线化方法
- Windows系统下Python与NumPy、matplotlib安装方法
- Python使用matplotlib,numpy,scipy进行散点的平滑曲线化方法
- 在python命令中,安装numpy,matplotlib等插件的方法
- Windows764位+python35下依赖包的安装方法(numpy、pandas、matplotlib等)
- (Windows)Python用压缩包方法安装Numpy和MatplotLib
- python安装numpy、scipy和matplotlib等whl包的方法
- Python安装NumPy,matplotlib等方法
- Python中安装numpy,scipy,matplotlib安装方法
- Python 2.7(3.x)以及numpy、matplotlib和scipy库三种方法实战安装
- Python安装Numpy和matplotlib的方法(推荐)
- python 安装matplotlib后运行图表时提示错误numpy版本不对的解决方法
- Windows64 系Python、NumPy与matplotlib 安装方法
- Windows下 python快速安装numpy、matplotlib、scikit-learn等库方法总结
- Python 2.7(3.x)以及numpy、matplotlib和scipy库三种方法实战安装
- Windows64 系统下Python、NumPy与matplotlib 安装方法