Um zu den komplexen Verarbeitungsalgorithmen zu gelangen, lohnt es sich, Standardschemata zu analysieren, mit denen ich beginnen möchte.
Für Verarbeitungsbeispiele wird ein Bild mit verschiedenen Farbsätzen verwendet:

Zu Beginn benötigen wir zwei Bibliotheksmodule:
from PIL import Image, ImageDraw
Richten Sie Tools für eine komfortable zukünftige Arbeit ein:
image = Image.open('test.jpg')
Fangen wir an
Wir werden Bilder im RGB-Format verarbeiten. PIL unterstützt auch die Arbeit mit den Formaten 1, L, P, RGB, RGBA, CMYK, YCbCr, LAB, HSV, I, F.
Die Pixelwerte im Bild werden im folgenden Format festgelegt:
(x, y), (rot, grün, blau) , wobei
x, y die Koordinaten sind und die numerischen Werte von RGB im Bereich von 0 bis 255 liegen. Das heißt, wir arbeiten mit einem
8-Bit-Bild. Graustufen
Bei Gleichheit aller Farbpaletten erscheint ein Grauton, daher müssen wir den arithmetischen Mittelwert für alle drei Punkte ermitteln:
for x in range(width): for y in range(height): r = pix[x, y][0]

Leichte NuanceDas menschliche Auge nimmt ein unterschiedliches Farbspektrum auf unterschiedliche Weise wahr. Niemand wird Ihnen die genaue Formel geben, da die Wahrnehmung von Farben für jeden auf die eine oder andere Weise unterschiedlich ist, aber wenn Sie interessiert sind, können Sie
hier und
hier mehr lesen.
Inversion
Die Inversion wird durch Subtrahieren der aktuellen Farbe von 255 erhalten:
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))

Graustufeninversion
Wenn Sie die beiden vorherigen Algorithmen kombinieren, können Sie den folgenden Code schreiben:
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))

Selektive Graustufeninversion
Für diesen Algorithmus müssen Sie den Schwellenwert bestimmen, den ich für 100 nehmen werde:
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:

Fazit
In den folgenden Artikeln möchte ich darüber sprechen, wie die Bildfilterung lokaler durch Aufteilen in Bereiche angegangen werden kann, und interessante Möglichkeiten der
DFS in Bildverarbeitungsalgorithmen aufzeigen