commandes utiliseés : Image.open(), size, def(), asarray(), load(), getdatata(), putdata().

Posteriser une image avec Python

Nous allons transformer une image en 256 valeurs de gris en une image avec 2 valeurs de gris. Le choix qui a été fait est de donner la valeur 50 aux pixels dont la valeur est supérieure à 122 ; les autres reçoivent la valeur 190. Rappelons que la valeur 0 correspond au noir et la valeur 255 au blanc.


Avec les matrices

On utilise le module numpy et le module Image.

Il y a trois parties :

  1. ouverture de l'image et transformation en matrice;
  2. création d'une fonction que l'on applique à tous les éléments de la matrice;
  3. création d'une nouvelle image à partir de la matrice obtenue après traitement.
from numpy import *
import Image
####################
im = Image.open("visage.png")
a,b=im.size     # taille de l'image
M=asarray(im)# matrice
####################
def seuil(a):
    if a<122:
        return 50
    else:
        return 190

vs = vectorize(seuil)
P=vs(M)
 ####################    
result = Image.new("L",(a,b))
pix=result.load()

for i in range(a):
    for j in range(b):
        pix[i,j] =P[j,i]  #inversion
result.save("visa.png")

Dans la deuxième partie, on crée une fonction et on lui permet, avec vectorize, s'appliquer à tous les éléments d'un tableau.

Télécharger le script

Sans matrice

Le script est inspiré par l'excellent tutoriel de François Louis LAILLIER . Ici, on utilise seulement le module Image


import Image
#fonction qui separe les pixels en deux groupes
def seuil(x):
    if x<122:
        return 50
    else:
        return 160
    
#creation de la liste des pixels
im = Image.open("visage.png")
listelue = im.getdata()
a,b=im.size
#action de la fonction sur la liste
listetrans=[seuil(x) for x in listelue]
#creation de la nouvelle image
result = Image.new("L",(a,b))
result.putdata(listetrans)
result.save("visa.png")


Ici, on travaille directement sur des listes, c'est-à-dire des tableaux à une dimension et non des matrices. La deuxième méthode est plus simple.

fait le 30 décembre 2008 et le 1er janvier 2009