Visualizzazione delle immagini in scala di grigi utilizzando matplotlib
-
26-09-2019 - |
Domanda
Sto cercando di visualizzare un'immagine in scala di grigi utilizzando matplotlib.pyplot.imshow () . Il mio problema è che l'immagine in scala di grigi viene visualizzata come una mappa di colori. Ho bisogno della scala di grigi perché voglio attingere superiore dell'immagine con il colore.
ho letto l'immagine e convertirla in scala di grigi utilizzando del PIL Image.open (). Convertito ( "L")
image = Image.open(file).convert("L")
Poi convertire l'immagine in una matrice in modo che possa facilmente fare qualche elaborazione immagine usando
matrix = scipy.misc.fromimage(image, 0)
Tuttavia, quando lo faccio
figure()
matplotlib.pyplot.imshow(matrix)
show()
visualizza l'immagine utilizzando una mappa colori (cioè non è in scala di grigi).
Che cosa sto facendo male qui?
Soluzione
Il codice seguente caricare un'immagine da un file image.png
e mostrerà come scala di grigi.
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
fname = 'image.png'
image = Image.open(fname).convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap='gray', vmin=0, vmax=255)
plt.show()
Se si desidera visualizzare la scala di grigi inversa, passare il CMAP a cmap='gray_r'
.
Altri suggerimenti
tenta di utilizzare una mappa dei colori in scala di grigi?
es. qualcosa come
imshow(..., cmap=pyplot.cm.binary)
Per un elenco delle mappe di colori, vedi http://scipy-cookbook.readthedocs.org /items/Matplotlib_Show_colormaps.html
import matplotlib.pyplot as plt
Si può anche eseguire una volta nel codice
plt.gray()
Questo mostrerà le immagini in scala di grigi di default
im = array(Image.open('I_am_batman.jpg').convert('L'))
plt.imshow(im)
plt.show()
Vorrei utilizzare il metodo di get_cmap. Es:.
import matplotlib.pyplot as plt
plt.imshow(matrix, cmap=plt.get_cmap('gray'))
provare questo:
import pylab
from scipy import misc
pylab.imshow(misc.lena(),cmap=pylab.gray())
pylab.show()
@ di unutbu risposta è abbastanza vicino alla risposta giusta.
Per impostazione predefinita, plt.imshow () tenterà di scalare il (MXN) i dati array per 0.0 ~ 1.0. E poi la mappa a 0 ~ 255. Per la maggior parte le immagini scattate naturali, questo va bene, non si vedrà un diverso. Ma se avete ristretta gamma immagine del valore di pixel, dire il minimo pixel è 156 e il pixel massimo è 234. L'immagine grigia volontà osserva totalmente sbagliato. Il modo giusto per mostrare un'immagine in grigio
from matplotlib.colors import NoNorm
...
plt.imshow(img,cmap='gray',norm=NoNorm())
...
Vediamo un esempio:
questa è l'immagine origianl: originale
questo è usando impostazione defaul norma, che non è: sbagliato pic
questo è usando impostazione NoNorm, che è NoNorm (): destra pic
Usa senza interpolazione e insieme al grigio.
import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')