87 lines
3.7 KiB
Python
87 lines
3.7 KiB
Python
import os
|
|
import random
|
|
from PIL import Image
|
|
|
|
def bild_verarbeiten(bild_ordner, ausgabe_ordner, transformierungsfunktion):
|
|
"""
|
|
Veraarbeitet alle Bilder in einem Ordner und speichert die Ergebnisse in einem anderen Ordner.
|
|
Verwendet eine übergebene Funktion zur Bildtransformation.
|
|
"""
|
|
for dateiname in os.listdir(bild_ordner):
|
|
if dateiname.lower().endswith(('png', 'jpg', 'jpeg')):
|
|
bild_pfad = os.path.join(bild_ordner, dateiname)
|
|
try:
|
|
bild = Image.open(bild_pfad)
|
|
neues_bild = transformierungsfunktion(bild)
|
|
neues_bild_pfad = os.path.join(ausgabe_ordner, dateiname)
|
|
neues_bild.save(neues_bild_pfad)
|
|
print(f"Bild '{dateiname}' erfolgreich verarbeitet und gespeichert in '{neues_bild_pfad}'")
|
|
except Exception as e:
|
|
print(f"Fehler beim Verarbeiten von '{dateiname}': {e}")
|
|
|
|
|
|
def bild_verarbeiten_einzelbild(bild, zufalls_pixel_chance=0.1):
|
|
return bild
|
|
|
|
def bild_rauschen(bild, zufalls_pixel_chance=0.01):
|
|
"""
|
|
Verarbeitet ein einzelnes Bild, indem es zufällig ausgewählte Pixel
|
|
mit einer gegebenen Wahrscheinlichkeit durch weiße Pixel ersetzt.
|
|
|
|
Args:
|
|
bild (PIL.Image.Image): Das zu verarbeitende Bild-Objekt.
|
|
zufalls_pixel_chance (float): Die Wahrscheinlichkeit (zwischen 0.0 und 1.0),
|
|
dass ein einzelnes Pixel durch Weiß ersetzt wird.
|
|
Standardmäßig 0.1 (10%).
|
|
|
|
Returns:
|
|
PIL.Image.Image: Das verarbeitete Bild mit zufällig ersetzten weißen Pixeln.
|
|
Das Originalbild wird direkt modifiziert.
|
|
"""
|
|
# Lade die Pixeldaten für effizienten Lese-/Schreibzugriff.
|
|
# .load() gibt ein PixelAccess-Objekt zurück, das direkten Zugriff erlaubt.
|
|
pixel_data = bild.load()
|
|
width, height = bild.size
|
|
|
|
# Definiere die Farbe Weiß. Wir müssen den Bildmodus berücksichtigen.
|
|
# Einfacher Ansatz: Konvertiere zu RGB, dann ist Weiß immer (255, 255, 255).
|
|
# Alternativ: Prüfe den Modus und setze Weiß entsprechend (z.B. 255 für 'L').
|
|
# Wir wählen hier die Konvertierung zu RGB für Konsistenz.
|
|
if bild.mode != 'RGB':
|
|
# Konvertiere das Bild zu RGB. Achtung: Dies kann Alphakanäle entfernen
|
|
# oder Graustufenbilder farbig machen (wenn auch nur in Grautönen).
|
|
# Wenn der Originalmodus wichtig ist, muss die Logik angepasst werden.
|
|
bild = bild.convert('RGB')
|
|
pixel_data = bild.load() # Pixeldaten nach Konvertierung neu laden
|
|
width, height = bild.size # Größe könnte sich theoretisch ändern (selten)
|
|
|
|
white_color = (255, 255, 255) # Weiß im RGB-Format
|
|
|
|
# Gehe durch jedes Pixel im Bild
|
|
for x in range(width):
|
|
for y in range(height):
|
|
# Generiere eine Zufallszahl zwischen 0.0 und 1.0
|
|
# Wenn die Zahl kleiner als die gewünschte Chance ist, ersetze das Pixel
|
|
if random.random() < zufalls_pixel_chance:
|
|
# Ersetze das Pixel an Position (x, y) durch Weiß
|
|
pixel_data[x, y] = white_color
|
|
|
|
# Gib das modifizierte Bild zurück
|
|
return bild
|
|
|
|
|
|
# Hauptteil des Skripts
|
|
if __name__ == "__main__":
|
|
bild_ordner = "./bilder"
|
|
ausgabe_ordner = "./fehler"
|
|
# Hier kannst du die transformierungsfunktion definieren oder importieren
|
|
transformierungsfunktion = bild_rauschen # Standardmäßig die Farbtransformation
|
|
|
|
if not os.path.exists(bild_ordner):
|
|
print(f"Ordner '{bild_ordner}' nicht gefunden. Bitte erstellen Sie ihn.")
|
|
exit()
|
|
if not os.path.exists(ausgabe_ordner):
|
|
os.makedirs(ausgabe_ordner)
|
|
|
|
bild_verarbeiten(bild_ordner, ausgabe_ordner, transformierungsfunktion)
|
|
print("Verabeitung abgeschlossen.") |