Pour accéder aux algorithmes de traitement complexes, il convient d'analyser les schémas standard, avec lesquels je suggère de commencer.
Pour les exemples de traitement, une image avec différents jeux de couleurs sera utilisée:

Pour commencer, nous avons besoin de deux modules de bibliothèque:
from PIL import Image, ImageDraw
Configurez des outils pour un travail futur confortable:
image = Image.open('test.jpg')
Commençons
Nous traiterons les images au format RVB. PIL prend également en charge le travail avec les formats 1, L, P, RVB, RVBA, CMJN, YCbCr, LAB, HSV, I, F.
Les valeurs de pixels dans l'image sont définies au format:
(x, y), (rouge, vert, bleu) , où
x, y sont les coordonnées et les valeurs numériques RVB sont comprises entre 0 et 255. Autrement dit, nous travaillons avec une
image 8 bits. Niveaux de gris
Une teinte grise apparaît dans le cas de l'égalité de toutes les palettes de couleurs, nous devons donc obtenir la valeur moyenne arithmétique sur les trois points:
for x in range(width): for y in range(height): r = pix[x, y][0]

Légère nuanceL'œil humain perçoit un spectre de couleurs différent de différentes manières. Personne ne vous donnera la formule exacte, car la perception des couleurs est différente pour chacun d'une manière ou d'une autre, mais si vous êtes intéressé, vous pouvez en lire plus
ici et
ici .
Inversion
L'inversion est obtenue en soustrayant la couleur actuelle de 255:
for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] draw.point((x, y), (255 - r, 255 - g, 255 - b))

Inversion en niveaux de gris
En combinant les deux algorithmes précédents, vous pouvez écrire le code suivant:
for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] sr = (r + g + b) // 3 draw.point((x, y), (255 - sr, 255 - sr, 255 - sr))

Inversion sélective en niveaux de gris
Pour cet algorithme, vous devez déterminer la valeur seuil, que je prendrai pour 100:
for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] if (r+g+b)>100:

Conclusion
Dans les articles suivants, j'aimerais parler de la façon d'aborder le filtrage d'image de manière plus locale en le divisant en zones, ainsi que de montrer les possibilités intéressantes de
DFS dans les algorithmes de traitement d'image.