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.
On utilise le module numpy et le module Image.
Il y a trois parties :
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.
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