2013-01-01 19 views
5

Il mio obiettivo:Visualizzazione di un'immagine in scala di grigi

  1. Leggi un'immagine nel formato PIL.
  2. Converti in scala di grigi.
  3. Tracciare l'immagine usando pylab.

Ecco il codice che sto utilizzando:

from PIL import Image 
from pylab import * 
import numpy as np 

inputImage='C:\Test\Test1.jpg' 
##outputImage='C:\Test\Output\Test1.jpg' 

pilImage=Image.open(inputImage) 
pilImage.draft('L',(500,500)) 
imageArray= np.asarray(pilImage) 

imshow(imageArray) 

##pilImage.save(outputImage) 

axis('off') 

show() 

mio problema: L'immagine di get visualizzata come i colori sono invertiti.

This is the Original Image

This is how it appears in the Python Window

Ma so che l'immagine è sempre convertita in scala di grigi, perché quando scrivo per il disco che sta comparendo come immagine in scala di grigi. (Proprio come mi aspetto).

Ritengo che il problema sia da qualche parte nella conversione numpy.

Ho appena iniziato a programmare in Python per Image Processing. Anche consigli e linee guida saranno apprezzati.

risposta

13

Si desidera a un eccesso di cavalcare la mappa dei colori di default:

imshow(imageArray, cmap="Greys_r") 

Here's a page on plotting images and pseudocolor in matplotlib.

+0

ho provato questo. Ottengo un'immagine in scala di grigi, tuttavia è un'immagine in scala di grigi invertita. –

+0

OK - aggiornato con la colormap inversa – YXD

+0

Questo ha risolto il mio problema. Puoi spiegarmi cosa è stata eseguita questa parte e perché è necessaria per imshow()? O forse indirizzarmi verso una pagina che possa spiegare questo. –

2

Questo produce un'immagine B & W:

pilImage=Image.open(inputImage) 
pilImage = pilImage.convert('1') #this convert to black&white 
pilImage.draft('L',(500,500)) 

pilImage.save('outfile.png') 

Dal convert metodo docs:

convert 

im.convert(mode) => image 

Returns a converted copy of an image. 
When translating from a palette image, this translates pixels through the palette. 
If mode is omitted, a mode is chosen so that all information in the image and the palette can be represented without a palette. 

When from a colour image to black and white, the library uses the ITU-R 601-2 luma transform: 

    L = R * 299/1000 + G * 587/1000 + B * 114/1000 
When converting to a bilevel image (mode "1"), the source image is first converted to black and white. 
Resulting values larger than 127 are then set to white, and the image is dithered. 
To use other thresholds, use the point method. 
Problemi correlati