numpy三元组阵列到RGB图像

时间:2017-09-11 13:37:30

标签: python numpy python-imaging-library

我有一个带深度值的numpy-array np.vectorize。对于数组中的每个单元格,我希望为它们分配预定义的颜色。我目前使用if和许多(245,223,247)语句执行此操作。我现在可以制作一些我需要的东西,例如.png

我可以创建一个新的numpy数组并将其导出为[[r,g,b],[r,g,b],[r,g,b],[r,g,b] [r,g,b],[r,g,b],[r,g,b],[r,g,b] [r,g,b],[r,g,b],[r,g,b],[r,g,b] [r,g,b],[r,g,b],[r,g,b],[r,g,b]] - 图像吗?

这是我拥有的数组:

depth

我希望将其翻译成.png图像。

修改 This Gist是打印到文本的UpdateReadModel - 数组的示例。它太大了,不能在python中显示。它还显示了我想要应用于每个单元格以创建rgb颜色的功能。

这是灰度级的示例图像。基于以上单位。 enter image description here

1 个答案:

答案 0 :(得分:0)

我认为最简单(也是最公平)的解决方案是使用色彩映射。例如:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors

N         = 256
cols      = np.zeros((N,4))
cols[:,0] = np.linspace(0,1,N) # R
cols[:,1] = np.linspace(0,1,N) # G
cols[:,2] = np.linspace(0,1,N) # B
cols[:,3] = 1                  # alpha
cmap      = colors.ListedColormap(cols,name='MyColormap',N=N)

x,y = np.meshgrid(np.linspace(0,1,100),np.linspace(0,1,100))
d   = np.sqrt(x**2+y**2)

fig,ax = plt.subplots()

cax = ax.imshow(d,cmap=cmap,clim=[0,np.sqrt(2.)])

cbar = fig.colorbar(cax,aspect=10)

ax.xaxis.set_ticks(range(0,101,20))
ax.yaxis.set_ticks(range(0,101,20))

plt.xlim([0,100])
plt.ylim([0,100])

plt.xlabel(r'$x$')
plt.ylabel(r'$y$')

plt.savefig('so.png')

结果如下:

enter image description here

请注意,该示例包含一个自定义(但非常简单的灰度)色彩映射,它应该适合您的目的。您也可以使用预定义的内容(例如cmap='afmhot'),请参阅the matplotlib documentation

如果你想要一组离散的颜色,你可以简单地对你的数据应用阈值处理(在这种情况下为d)。

  

我的问题对我来说有点过于宽泛,无法将此专门用于您的示例。对于我们来帮助你,你应该用文字,你的意思更简洁地表达。但我相信你可以从这里独立进步。