Le module ImageChops contient un certain nombre d'opérations arithmétiques sur les images, parfois appelées opérations sur canaux (channel operations : chops).
Ces chops ne marchent, pour la plupart, que sur des images 8-bit (par exemple "L" et "RGB").
Voici comment faire la moyenne de deux images :
>>> import Image as im >>> im1=im.open('nath2.jpg') >>> im2=im.open('nath3.jpg') >>> from ImageChops import * >>> dd = add(im1,im2, scale = 2) >>> dd.show()
Les opérations proposées sont...
Ajoute les deux images, divise le résultat par scale, et ajoute au final offset à chaque pixel de l'image. Par défaut, scale = 1.0 et offset = 0.0.
out = (image1 + image2) / scale + offset
Comme la fonction blend du module Image.
Comme la fonction composite du module Image.
Renvoie une image de même taille que image, dont tous les pixels ont pour valeur value.
>>> import Image, ImageChops >>> image = Image.open('cover.jpeg') >>> fixe=ImageChops.constant(image,150) >>> fixe.show() >>> image.size, fixe.size ((300, 300), (300, 300))
Compare deux à deux les pixels des images image1 et image2, et ne conserve à chaque fois que le pixel le moins lumineux (le min des deux valeurs).
Renvoie la valeur absolue de la différence entre les deux images passées en argument.
out = abs(image1 - image2)
Voici un exemple d'utilisation :
>>> import Image as im >>> im1 = im.open('image1.jpeg') >>> im2 = im.open('image2.jpeg') >>> from ImageChops import difference >>> im3 = difference(im1,im2) >>> im3.show()
Renvoie une copie de l'image donnée.
>>> import Image, ImageChops >>> image = Image.open('cover.jpeg') >>> image2 = ImageChops.duplicate(image)
Renvoie le négatif de l'image (chaque valeur x devient 255-x).
>>> import Image, ImageChops >>> image = Image.open('cover.jpeg') >>> negatif=ImageChops.invert(image) >>> negatif.show() >>> negatif.mode 'RGB'
Compare deux à deux les pixels des images image1 et image2, et ne conserve à chaque fois que le pixel le plus lumineux (le max des deux valeurs).
>>> import Image, ImageChops >>> image = Image.open('cover.jpeg') >>> image2 = Image.open('cover2.jpeg') >>> image3 = ImageChops.lighter(image,image2)
Surimpression des deux images. Pour chaque couple de pixels (im1,im2), appartenant respectivement à image1 et image2, renvoie le pixel
out = im1*im2 / 255.
Cas particulier :
Retourne une copie, décalée de xoffset pixels en x, et de yoffset pixels en y, de l'image d'origine. Si yoffset n'est pas précisé, il sera égal à xoffset.
>>> import Image, ImageChops >>> image = Image.open('cover.jpeg') >>> decale=ImageChops.offset(image,50) >>> decale.show() >>> decale2=ImageChops.offset(image,50,20) >>> decale2.show()
Surimpression des deux négatifs...
out = MAX - ((MAX - image1) * (MAX - image2) / MAX)
Comme ci-dessus, en remplaçant addition par soustraction.
out = (image1 - image2) / scale + offset
La plupart des opérations sur canaux reçoivent une ou deux images en argument, et renvoient une nouvelle image (dont les valeurs sont éventuellement tronquées à l'intervalle entier [0,255])