关于python:从matplotlib图像获取RGBA数组

Getting an RGBA array from a matplotlib image

我用imshow绘制了一个带有自定义颜色映射和边界形式的数组。但是,这将是一个自动脚本,我想保存由imshow生成的没有轴的图像。所以我不确定imshow是最好的方法,因为它将在后台运行。有没有一个替代方案,我可以设置颜色映射和边界形式,并生成一个rgba数组,我可以给imsave?或者,我是不是只剩下对imshow生成并保存的图像进行黑客攻击了?


您可以使用as_rgba_str从图像中获取图像数据。下面是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2, 1000)
X, Y = np.meshgrid(x, x)
data = np.sin((X-2)**3 + Y**4)

im = plt.imshow(data)

x = im.make_image()
h, w, d = x.as_rgba_str()
n = np.fromstring(d, dtype=np.uint8).reshape(h, w, 4)

plt.figure()
plt.imshow(n[:,:,0], cmap="gray", origin='lower')

plt.show()

原始图像:enter image description here

来自rgba数据的R通道(请注意,所有蓝色部分都是黑色的,因为其中没有红色部分):氧化镁