如何为numpy数组的每个元素设置alpha值

时间:2012-07-12 02:22:03

标签: python arrays image numpy matplotlib

我想填充数组,然后将其显示为图像。我想为每个数组元素设置两个参数:“颜色值”和“透明度值”。 我正在使用matplotlib中的imshow,但我对其他解决方案持开放态度。 我试过这样的事情,其中​​ca_map是一个MxN数组。

ca_map = np.array(ca_map)

palette = cm.jet
palette.set_under('w', 1.0)

plt.axis('off')
plt.imshow(ca_map, cmap=palette, norm=colors.Normalize(vmin=0, clip=False), interpolation='sinc')
plt.show()

提前致谢。

2 个答案:

答案 0 :(得分:2)

文档(http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.imshow)表示您可以将MxNx4 RGBA值数组传递给imshow。因此,假设ca_map是MxNx3,您可以执行以下操作:

plt.imshow(np.dstack([ca_map, alpha], ...)

或者如果ca_map是MxN,那么:

plt.imshow(np.dstack([ca_map, ca_map, ca_map, alpha], ...)

答案 1 :(得分:1)

Luke的答案对MxNx3有好处,但对于MxN案例,他的解决方案会为你的图像提供灰度(相等的rgb值)。如果您想在图像中使用任何颜色,以下内容可能会有所帮助:

import matplotlib.pyplot as plt
import numpy

data = numpy.arange(12.).reshape(3, 4)

import matplotlib.colors
norm = matplotlib.colors.Normalize(data.min(), data.max())


img_array = plt.get_cmap('jet')(norm(data))
print img_array.shape
img_array[..., 3] = 1 - (norm(data)/2)  # <- some alpha values between 0.5-1

plt.imshow(img_array)
plt.show()