Mam prosty problem, ale nie mogę znaleźć dobrego rozwiązania.
Chcę wziąć tablicę NumPy 2D, która reprezentuje obraz w skali szarości i przekonwertować ją na obraz RGB PIL, stosując niektóre z map kolorów matplotlib.
Mogę uzyskać rozsądny wynik w formacie PNG za pomocą pyplot.figure.figimage
polecenia:
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')
Chociaż mógłbym to dostosować, aby uzyskać to, czego chcę (prawdopodobnie używając StringIO do uzyskania obrazu PIL), zastanawiam się, czy nie ma prostszego sposobu na zrobienie tego, ponieważ wydaje się to bardzo naturalny problem wizualizacji obrazu. Powiedzmy coś takiego:
colored_PIL_image = magic_function(array, cmap)
python
numpy
matplotlib
python-imaging-library
color-mapping
heltonbiker
źródło
źródło
Odpowiedzi:
Dość zajęty jednolinijkowy, ale oto jest:
myarray
jest znormalizowana z maksymalną wartością w1.0
.myarray
.0-255
zakresu.np.uint8()
.Image.fromarray()
.I jesteś skończony:
z
plt.savefig()
:z
im.save()
:źródło
myarray
” części wyciętej prosto do serca! Nie wiedziałem, że to możliwe, dziękuję!im = Image.fromarray(cm.gist_earth(myarray, bytes=True))
NameError: name 'cm' is not defined
from matplotlib import cm
Image.fromarray -> zwraca obiekt obrazu
źródło
Metoda opisana w zaakceptowanej odpowiedzi nie działała u mnie nawet po zastosowaniu zmian wymienionych w jej komentarzach. Ale poniższy prosty kod zadziałał:
np_array może być tablicą 2D z wartościami z zakresu 0..1 floats o2 0..255 uint8 iw takim przypadku potrzebuje cmap. W przypadku tablic 3D cmap zostanie zignorowany.
źródło