2017-09-11 8 views
-1

깊이 값이있는 numpy 배열 [i,j]이 있습니다. 배열의 각 셀에 대해 미리 정의 된 색상을 지정하고 싶습니다. 나는 현재 np.vectorize과 많은 if- 문구로 그렇게하고있다. 나는 이제 예를 들어 (245,223,247)과 같은 것을 만들 수 있습니다.RGB 이미지에 numpy three-tuple array

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 Gist 텍스트로 인쇄 depth -array의 예입니다. 그것은 너무 커서 python으로 표시 할 수 없습니다. 또한 rgb-color를 만들기 위해 모든 셀에 적용하고자하는 기능을 보여줍니다.

이 샘플 이미지는 그레이 스케일로 표시됩니다. 위의 단위를 기준으로합니다. 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

하는 것으로. 당신은 색상의 이산 세트를 원하는 경우 the matplotlib documentation

를 참조 또한, (예를 들어, cmap='afmhot'에 의해) 미리 정의 된 것들을 사용할 수 있습니다, 당신은 단순히 데이터 (이 경우 d)에 임계 값을 적용 할 수 있습니다.

귀하의 질문에 귀하의 질문을 전문적으로 적용하기에는 너무 광범위했습니다. 우리가 당신을 도울 수 있도록, 더 간결하게, 말로, 당신이 의미하는 것을 공식화해야합니다. 하지만 여기서 독립적으로 발전 할 수 있다고 확신합니다.

+0

matplotlib도 자신의 [colormap]을 만들 수있는 기능을 가지고 있습니다. (http://matplotlib.org/api/colors_api.html#matplotlib.colors.from_levels_and_colors) –

+0

@ MaartenFabré이 답변에 중요한 추가 사항이 맞습니다. 예를 들어 답을 편집했습니다. –