Eu tenho um problema simples, mas não consigo encontrar uma boa solução para ele.
Eu quero pegar uma matriz NumPy 2D que representa uma imagem em escala de cinza e convertê-la em uma imagem RGB PIL enquanto aplico alguns dos mapas de cores matplotlib.
Posso obter uma saída PNG razoável usando o pyplot.figure.figimage
comando:
dpi = 100.0
w, h = myarray.shape[1]/dpi, myarray.shape[0]/dpi
fig = plt.figure(figsize=(w,h), dpi=dpi)
fig.figimage(sub, cmap=cm.gist_earth)
plt.savefig('out.png')
Embora eu possa adaptar isso para obter o que quero (provavelmente usando o StringIO para obter a imagem PIL), pergunto-me se não há uma maneira mais simples de fazer isso, pois parece ser um problema muito natural de visualização de imagens. Digamos, algo como isto:
colored_PIL_image = magic_function(array, cmap)
python
numpy
matplotlib
python-imaging-library
color-mapping
heltonbiker
fonte
fonte
Respostas:
Bastante ocupado, mas aqui está:
myarray
é normalizada com o valor máximo em1.0
.myarray
.0-255
alcance.np.uint8()
.Image.fromarray()
.E pronto:
com
plt.savefig()
:com
im.save()
:fonte
myarray
" é cortada diretamente no coração! Não sabia que era possível, obrigado!im = Image.fromarray(cm.gist_earth(myarray, bytes=True))
NameError: name 'cm' is not defined
from matplotlib import cm
Image.fromarray -> retorna um objeto de imagem
fonte
O método descrito na resposta aceita não funcionou para mim, mesmo depois de aplicar as alterações mencionadas em seus comentários. Mas o código simples abaixo funcionou:
np_array pode ser uma matriz 2D com valores de 0..1 flutua o2 0..255 uint8 e, nesse caso, precisa de cmap. Para matrizes 3D, o cmap será ignorado.
fonte