Le module ImageMath peut être utilisé pour évaluer des "expressions sur image". Ce module ne fournis qu'une fonction, eval, qui reçoit une chaîne de caractères et au moins une image.
>>> import Image, ImageMath >>> im1 = Image.open("image1.jpg") >>> im2 = Image.open("image2.jpg") >>> out = ImageMath.eval("convert(min(a, b), 'L')", a=im1, b=im2) >>> out.save("result.png")
L'argument environment est un dictionnaire qui mappe les noms d'image en objet Image. Il peut être utilisé un (ou plusieurs) mot-clé(s) au lieu d'un dictionnaire (voir l'exemple ci-dessous).
Actuellement, le module ImageMath n'accepte que des images simple-bande. Pour agir sur des images multi-bandes, utiliser les méthodes split et merge.
La fonction eval renvoie une image, un entier, un réel ou un pixe, selon l'expression.
Les expressions dont il est question ici sont les expressions standard de Python, mais qui sont réévaluées dans un cadre non standard. Il est ici possible d'utiliser les méthodes PIL, ainsi que les fonctions et opérateurs suivants :
Les opérateurs binaires +, -, * et / peuvent être utilisés, ainsi que le moins unaire(-), le modulo (%) et la puissance (**). Toutes ces opérations sont faites avec 32 bits (que ce soit des valeurs entières ou réelles).
La conversion peut être forcée (voir les fonctions convert, float et int ci-dessous).
Ce module fournis aussi des fonctions qui opèrent sur les bits : le et (&), le ou (|), et le ou exclusif (^). On peut aussi nier (~).
Les opérandes sont convertis en entiers signés 32 bits, avant d'effectuer l'opération : une valeur négative est retournée dans le cas de la négation d'une image en niveaux de gris, par exemple. Le et (&) peut être utilisé pour masquer les bits non souhaités.
Les opérateurs logiques, tels and, or et not opèrent sur toute l'image, plutôt que sur chaque pixel.
Une image vide (tous les pixels à zéro) est considérée comme False, toute autre image comme True.
and et or renvoient le dernier opérande évaleué, quand not retourne toujours un booléen.
Les fonctions suivantes sont appliquées à chaque pixel.
Les images 1 bit et 8 bits sont automatiquement converties en 32 bits, si nécessaire.