Saya memiliki masalah sederhana, tetapi saya tidak dapat menemukan solusi yang baik untuk itu.
Saya ingin mengambil array NumPy 2D yang mewakili gambar grayscale, dan mengubahnya menjadi gambar RGB PIL sambil menerapkan beberapa colormaps matplotlib.
Saya bisa mendapatkan output PNG yang masuk akal dengan menggunakan pyplot.figure.figimage
perintah:
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')
Meskipun saya dapat menyesuaikan ini untuk mendapatkan apa yang saya inginkan (mungkin menggunakan StringIO mendapatkan gambar PIL), saya bertanya-tanya apakah tidak ada cara yang lebih sederhana untuk melakukan itu, karena tampaknya merupakan masalah visualisasi gambar yang sangat alami. Katakanlah, sesuatu seperti ini:
colored_PIL_image = magic_function(array, cmap)
python
numpy
matplotlib
python-imaging-library
color-mapping
heltonbiker
sumber
sumber
Jawaban:
Satu baris yang cukup sibuk, tetapi ini dia:
myarray
,, dinormalisasi dengan nilai maksimal pada1.0
.myarray
.0-255
kisaran.np.uint8()
.Image.fromarray()
.Dan Anda sudah selesai:
dengan
plt.savefig()
:dengan
im.save()
:sumber
myarray
" yang dipotong langsung ke jantung! Saya tidak tahu itu mungkin, terima kasih!im = Image.fromarray(cm.gist_earth(myarray, bytes=True))
NameError: name 'cm' is not defined
from matplotlib import cm
Image.fromarray -> mengembalikan objek gambar
sumber
Metode yang dijelaskan dalam jawaban yang diterima tidak berhasil untuk saya bahkan setelah menerapkan perubahan yang disebutkan dalam komentarnya. Tetapi kode sederhana di bawah ini berfungsi:
np_array bisa berupa array 2D dengan nilai dari 0..1 floats o2 0..255 uint8, dan dalam hal ini diperlukan cmap. Untuk larik 3D, cmap akan diabaikan.
sumber