海绵宝宝撒
有人提出这样的方法np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')当然,此代码有效。但是,输出numpy数组图像的分辨率太低。我的提案代码是这个。import ioimport cv2import numpy as npimport matplotlib.pyplot as plt# plot sin wavefig = 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 figuredef 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数组获得。