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?

È stato utile?

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')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top