Nous allons appliquer, sur chaque pixel d'une image,
le même filtre sur les trois composantes de couleur.
La structure du programme, proposée ci-dessous, restera toujours la même.
La fonction ton()
est à adapter selon l'effet désiré.
La représentation graphique de cette fonction se nomme la courbe tonale
.
def ton(x) : ... return y from PIL import Image img = Image.open("pomme.jpg") for x in range(0,img.size[0]) : for y in range(0,img.size[1]) : p=img.getpixel((x,y)) img.putpixel((x,y),(ton(p[0]),ton(p[1]),ton(p[2]))) img.show()
La fonction ton()
doit retourner une valeur :
On peut donc la compléter :
def ton(x) : ... y=int(y) if y<0 : y=0 if y>255 : y=255 return y
Ou plus simplement :
def ton(x) : ... y=int(y) y=max(y,0) y=min(y,255) return y
Ou encore, en une seule ligne :
def ton(x) : ... return min(max(int(y),0),255)
Pour vos tests, vous pouvez télécharger l'image ci-dessous.
Le négatif d'une image s'obtient très simplement : Toutes les valeurs x des composantes de couleur sont remplacées par 255-x.
def ton(x) : y=255-x return y
Pour rendre une image moins contrastée, il faut assombrir les pixels clairs et éclaircir les pixels foncés.
def ton(x) : y=0.5*x+64 return int(y)
Pour rendre une image plus contrastée, il faut assombrir les pixels foncés et éclaircir les pixels clairs.
def ton(x) : y=2*x-127 return min(max(int(y),0),255)
Si on laisse deux valeurs possibles pour chacune des trois composantes de couleur,
la palette de couleurs se retrouve limités à huit couleurs.
Proposer une fonction ton()
correspondant à la courbe tonale ci-dessous.
Pour diminuer la luminosité, il suffit d'enlever une valeur fixe, 60 par exemple,
à chaque composante de couleurs.
Proposer une fonction ton()
correspondant à la courbe tonale ci-dessous.
Pour augmenter la luminosité, il suffit d'ajouter une valeur fixe, 60 par exemple,
à chaque composante de couleurs.
Proposer une fonction ton()
correspondant à la courbe tonale ci-dessous.
Il s'agit de remplacer, pour chaque pixel de l'image, la quantité de rouge par la quantité de bleu, la quantité de vert par la quantité de rouge... Plusieurs combinaisons sont possibles.
from PIL import Image img=Image.open("pomme.jpg") for x in range(0,img.size[0]) : for y in range(0,img.size[1]) : p=img.getpixel((x,y)) img.putpixel((x,y),(p[1],p[2],p[0])) img.show()
Dans une image en noir et blanc, chaque pixel est soit noir soit blanc. Dans une image en niveaux de gris, chaque pixel est gris, plus ou moins foncé. Pour chaque pixel d'une image couleur, un entier allant de 0 à 255 est calculé à partir des trois composantes de couleur. Dans l'exemple ci-dessous, à chaque composante de couleur est appliqué un coefficient pour lui donner un poids plus ou moins important.
from PIL import Image img=Image.open("paysage.jpg") for x in range(0,img.size[0]) : for y in range(0,img.size[1]) : p=img.getpixel((x,y)) g=int(0.3*p[0]+0.6*p[1]+0.1*p[2]) img.putpixel((x,y),(g,g,g)) img.save("gris.png") img.show()
Résultat :
Il existe de nombreuses solutions pour obtenir les contours d'une image. Ici, on part d'une image en niveaux de gris. Pour un pixel donné et les pixels voisins, on compare les niveaux de gris, à l'aide du seuil s. Si les différences de niveaux de gris sont importantes, alors cela correspond à un contour.
from PIL import Image img=Image.open("paysage.jpg") for x in range(0,img.size[0]) : for y in range(0,img.size[1]) : p=img.getpixel((x,y)) g=int(0.3*p[0]+0.6*p[1]+0.1*p[2]) img.putpixel((x,y),(g,g,g)) img2=Image.new("RGB",(img.size[0],img.size[1])) s=15 for x in range(1,img.size[0]) : for y in range(1,img.size[1]) : p=img.getpixel((x,y))[0] g=img.getpixel((x-1,y))[0] h=img.getpixel((x,y-1))[0] if abs(p-g)>s or abs(p-h)>s : img2.putpixel((x,y),(0,0,0)) else : img2.putpixel((x,y),(255,255,255)) img2.show()
Résultat :