2013-01-01 3 views
5

Mon but:Affichage d'une image en niveaux de gris

  1. Lire une image dans le format PIL.
  2. Convertissez-le en niveaux de gris.
  3. Tracer l'image en utilisant pylab.

Voici le code que je utilise:

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() 

Mon problème: Le get de l'image affichée comme les couleurs sont inversées.

This is the Original Image

This is how it appears in the Python Window

Mais je sais que l'image est convertie en niveaux de gris se, parce que quand je l'écris sur le disque, il apparaît comme une image en niveaux de gris. (Tout comme je pense). Je pense que le problème est quelque part dans la conversion numpy.

Je viens de commencer à programmer en Python pour le traitement d'image. Et des conseils et des lignes directrices seront également appréciés.

Répondre

13

Vous voulez emporter sur la carte des couleurs par défaut:

imshow(imageArray, cmap="Greys_r") 

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

+0

J'ai essayé. Je reçois une image en niveaux de gris, mais c'est une image en niveaux de gris inversée. –

+0

OK - mis à jour avec la palette de couleurs inverse – YXD

+0

Cela a résolu mon problème. Pouvez-vous m'expliquer, quelle est cette partie et pourquoi est-ce nécessaire pour imshow()? Ou peut-être me diriger vers une page qui peut expliquer cela. –

2

Ce produit B & W Image:

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

pilImage.save('outfile.png') 

De la méthode convertdocs:

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. 
Questions connexes