python 数组画图_Matplotlib:将绘图保存到numpy数组

有人提出这样一种方法np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')

当然,这个代码是有效的。但是,输出的numpy阵列图像分辨率太低。

我的建议代码是这样的。import io

import cv2

import numpy as np

import matplotlib.pyplot as plt

# plot sin wave

fig = plt.figure()

ax = fig.add_subplot(111)

x = np.linspace(-np.pi, np.pi)

ax.set_xlim(-np.pi, np.pi)

ax.set_xlabel("x")

ax.set_ylabel("y")

ax.plot(x, np.sin(x), label="sin")

ax.legend()

ax.set_title("sin(x)")

# define a function which returns an image as numpy array from figure

def get_img_from_fig(fig, dpi=180):

buf = io.BytesIO()

fig.savefig(buf, format="png", dpi=180)

buf.seek(0)

img_arr = np.frombuffer(buf.getvalue(), dtype=np.uint8)

buf.close()

img = cv2.imdecode(img_arr, 1)

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

return img

# you can get a high-resolution image as numpy array!!

plot_img_np = get_img_from_fig(fig)

此代码运行良好。

如果在dpi参数上设置一个较大的数字,则可以将高分辨率图像作为numpy数组。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值