Python: Matplotlab 的 figure转换为numpy的arrary方法

原创 2016年08月30日 20:49:40
    最近在写深度学习的代码的时候遇到一个问题,在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图片数组格式转化

Conversions between Various Formats     Convert between Python tuple and list a = (1, 2)...
  • xueweuchen
  • xueweuchen
  • 2014年10月12日 15:50
  • 13579

使用 numpy 和 PIL 进行简单的图像处理

内容来自中国大学生MOOC python 系列课程,在此做一个记录 直接贴代码 from PIL import Image import numpy as np # 反相 # a = np.ar...
  • Hyj6846492
  • Hyj6846492
  • 2017年07月12日 22:37
  • 1537

python图像数组操作与灰度变换

Python图像数组操作使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理numpy简介:NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比...
  • sunmc1204953974
  • sunmc1204953974
  • 2016年01月27日 11:03
  • 11046

Python & numpy 64位电脑的安装方法

  • 2014年12月01日 10:51
  • 17.76MB
  • 下载

Python & numpy 32位电脑的安装方法

  • 2014年12月01日 14:45
  • 23.95MB
  • 下载

Swift中数组(Arrary)及成员方法介绍

在大多数语言中数组是常见的一个基本类型数据结构,Swift也不例外,和大多数语言一样,Swift中数组是同类型对象的有序集合。然而在Objective-C的NSArray不一样的是可以存储任意类型的对...
  • shuai265
  • shuai265
  • 2015年11月15日 23:05
  • 177

《python计算机视觉编程》读书笔记------3(Matplotlab篇)

图像轮廓和直方图 在画图像轮廓前需要转换为灰度图像,因为轮廓需要对每个坐标[x,y]位置的像素值施加一个阈值。 # -*- coding: utf-8 -*- from PIL import...
  • Txiaomiao
  • Txiaomiao
  • 2016年03月18日 09:46
  • 801

Python之数组(array)使用方法总结与Numpy中的数组用法

Python:
  • u010956473
  • u010956473
  • 2017年06月02日 12:56
  • 3224

Python安装模块(numpy等)问题的两种解决办法——常规方法和Anaconda

一.常见模块安装问题Python是现在最顶尖的几个研究方向(人工智能、机器学习等)的主流编程语言,博主因为要参加竞赛也需要学习Python(主要是科学计算方面),现阶段会用到的模块有numpy、sci...
  • Pipi24
  • Pipi24
  • 2017年08月04日 11:32
  • 3524

python-numpy数组拼接方法介绍

数组拼接方法一 思路:首先将数组转成列表,然后利用列表的拼接函数append()、extend()等进行拼接处理,最后将列表转成数组。 示例1: >>> import numpy a...
  • tiankong_
  • tiankong_
  • 2017年11月23日 14:29
  • 103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python: Matplotlab 的 figure转换为numpy的arrary方法
举报原因:
原因补充:

(最多只允许输入30个字)