2017-09-11 166 views
-1

我有一個numpy陣列[i,j]與深度值。對於數組中的每個單元格,我希望爲它們分配預定義的顏色。我目前使用np.vectorize和很多if這幾個語句來完成。我現在可以製作一些我需要的東西,例如(245,223,247)numpy三元組陣列到RGB圖像

我可以創建一個新的numpy數組並將其導出爲.png -image嗎?

這是數組我有:

[[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]] 

而且我想它轉換成一個PNG圖片。

編輯: This Gistdepth -array,印刷文本的一個例子。它太大而無法在python中顯示。它還顯示了我想要應用於每個單元格以創建RGB顏色的功能。

這是一個灰度樣本圖像。根據以上單位。 enter image description here

+0

你想創建一個圖像,並用'(245,223,247)'顏色填充它嗎? –

+0

着色每個像素並將其導出。 –

+0

深度值如何存儲?請舉個小例子。 – Joe

回答

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)。

您的問題有點過於寬泛,我無法專注於您的示例。爲了幫助你,你應該用文字更簡潔地表述你的意思。但我相信你可以從這裏獨立前進。

+0

matplotlib還有一個函數可以讓你自己製作[colormap](http://matplotlib.org/api/colors_api.html#matplotlib.colors.from_levels_and_colors) –

+0

@MaartenFabré你是對的,這是對這個答案的重要補充。我編輯了我的答案以包含一個示例。 –