matplotlib の show() 画像を配列に変換する

場合によっては、matplotlib によって描画されたデータ グラフを、さらに処理するためのデータに変換する必要があります。

次の 2 つの方法があります。

方法 1:

 1. plt または fig オブジェクトを argb 文字列オブジェクトに変換する; 2. argb 文字列オブジェクトの image を配列または Image に変換する。

import matplotlib.pyplot as plt 
import matplotlib.cm as cm
import numpy as np

from matplotlib.backends.backend_agg import FigureCanvasAgg    
# 引入 Image
import PIL.Image as Image

    # 将plt转化为numpy数据
    canvas = FigureCanvasAgg(plt.gcf())
    print(type(canvas))
    # 绘制图像
    canvas.draw()
    # 获取图像尺寸
    w, h = canvas.get_width_height()
    # 解码string 得到argb图像
    buf = np.fromstring(canvas.tostring_argb(), dtype=np.uint8)

    # 重构成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]

方法 2:

まず matplotlib の savefig() メソッドを使用して画像をメモリに保存し、次に PIL または openCV メソッドを使用して画像を読み取ります。

import matplotlib.pyplot as plt 
import pylab
import imageio
import skimage.io
import cv2
from io import BytesIO
import PIL    

    #申请缓冲地址
    buffer_ = BytesIO()#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)
    #释放缓存    
    buffer_.close()
    cv2.imshow('image', data)
    cv2.waitKey()

参考:

Python: Matplotlab の Figure を numpy の配列メソッドに変換する - プログラマー募集

Python - matplotlib イメージを numpy.array または PIL.Image に変換します 

おすすめ

転載: blog.csdn.net/nature1949/article/details/124928719