commandes utiliseés : Image.open(), split(), merge(), getdatata(), putdata(),save().

Pixelliser une image avec Python

Nous allons pixelliser une image couleur dont les dimensions en pixels sont un multiple de 16 (144=16×9). Chaque carré de 16×16 pixel sera remplacé par un carré dont la valeur sera la moyenne des 256 pixels.


Les étapes

  1. ouverture de l'image, séparation des trois couleur;
  2. obtention de trois listes de 144×144=20 736 nombres compris entre 0 et 255
  3. création d'une fonction que l'on applique à chacune des trois liste;
  4. création de trois nouvelles images à partir des trois nouvelles listes.
  5. fusion des trois images pour former une image en couleurs
Les nouvelles fonctions utilisées sont split() et merge() qui éclatent et recollent les trois composantes d'une image couleur.

Le code

# -*- coding:Utf-8 -*-
import Image
#pour faire des carres de 16   
#p est le nb de carres dans la largeur
#q est le nb de carres dans la longueur

def pixel(l,p,q):
    for a in range(q):
        for c in range(p):
            mo=0
            for d in range(16):
                for b in range(16):
                    mo=mo+l[a*256*p+b*16*p+c*16+d]
            mo=int(mo/256)
            for d in range(16):
                for b in range(16):
                    l[a*256*p+b*16*p+c*16+d]=mo
    return l



p=9     # 9 carrés en largeur
q=9     # 9 carrés en longueur
#ouverture et éclatage de l'image
im = Image.open("ivain.png")
r,g,b=im.split()
#transformation de chaque image en liste 
#et action de la fonction pixel()
r=list(r.getdata())
r=pixel(r,p,q)

g=list(g.getdata())
g=pixel(g,p,q)

b=list(b.getdata())
b=pixel(b,p,q)
#création de trois nouvelles images
nr = Image.new("L",(16*p,16*q))
nr.putdata(r)
ng = Image.new("L",(16*p,16*q))
ng.putdata(g)
nb = Image.new("L",(16*p,16*q))
nb.putdata(b)

#fusion des trois nouvelles images
imgnew = Image.merge('RGB',(nr,ng,nb)) 
imgnew.save("ivainpix.png") 



Télécharger le script

fait le 1er novembre 2009