diff --git a/media/Schnappix_Test/Option_4_Brillanz.jpg b/media/Schnappix_Test/Option_4_Brillanz.jpg new file mode 100644 index 0000000..901ff9e Binary files /dev/null and b/media/Schnappix_Test/Option_4_Brillanz.jpg differ diff --git a/media/Schnappix_Test/Option_5_Weissabgleich.jpg b/media/Schnappix_Test/Option_5_Weissabgleich.jpg new file mode 100644 index 0000000..3300e8c Binary files /dev/null and b/media/Schnappix_Test/Option_5_Weissabgleich.jpg differ diff --git a/media/Schnappix_Test/Option_6_Aufgehellt_Gamma.jpg b/media/Schnappix_Test/Option_6_Aufgehellt_Gamma.jpg new file mode 100644 index 0000000..009c1cb Binary files /dev/null and b/media/Schnappix_Test/Option_6_Aufgehellt_Gamma.jpg differ diff --git a/test_enhancements_2.py b/test_enhancements_2.py new file mode 100644 index 0000000..c29ac81 --- /dev/null +++ b/test_enhancements_2.py @@ -0,0 +1,90 @@ +import os +import cv2 +import numpy as np +from PIL import Image, ImageEnhance, ImageOps + +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +INPUT_FILE = os.path.join(BASE_DIR, 'media', 'Schnappix', 'HochzeitNeleTill_2026-09-19_21-10-30_Raw.jpg') +TEST_DIR = os.path.join(BASE_DIR, 'media', 'Schnappix_Test') + +if not os.path.exists(TEST_DIR): + os.makedirs(TEST_DIR) + +def test_option_4_brillanz(input_path, output_path): + """Option 4: Brillanz - Sanfte Aufhellung, Kontrast und Sättigung (PIL)""" + try: + with Image.open(input_path) as img: + # Etwas aufhellen + img = ImageEnhance.Brightness(img).enhance(1.15) + # Etwas Kontrast + img = ImageEnhance.Contrast(img).enhance(1.05) + # Etwas Sättigung (ähnlich wie bei Option 1) + img = ImageEnhance.Color(img).enhance(1.2) + + img.save(output_path, quality=95) + except Exception as e: + print(f"Fehler Option 4: {e}") + +def test_option_5_weissabgleich(input_path, output_path): + """Option 5: Automatischer Weißabgleich (Grayworld) - fixt Farbstiche bei schlechtem Licht""" + try: + img = cv2.imread(input_path) + # Grayworld Assumption: Durchschnitt der Farben angleichen + b, g, r = cv2.split(img.astype(np.float32)) + m_b = np.mean(b) + m_g = np.mean(g) + m_r = np.mean(r) + + # Durchschnitt über alles + m = (m_b + m_g + m_r) / 3.0 + + # Anpassen der Kanäle, um Farbstich (z.B. gelbes Raumlicht) zu entfernen + b = np.clip(b * (m / m_b), 0, 255) + g = np.clip(g * (m / m_g), 0, 255) + r = np.clip(r * (m / m_r), 0, 255) + + balanced = cv2.merge((b, g, r)).astype(np.uint8) + + # Anschließend noch leicht Sättigung anheben (da Option 1 gut ankam) + hsv = cv2.cvtColor(balanced, cv2.COLOR_BGR2HSV).astype(np.float32) + h, s, v = cv2.split(hsv) + s = np.clip(s * 1.15, 0, 255) + hsv = cv2.merge((h, s, v)).astype(np.uint8) + final = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR) + + cv2.imwrite(output_path, final, [cv2.IMWRITE_JPEG_QUALITY, 95]) + except Exception as e: + print(f"Fehler Option 5: {e}") + +def test_option_6_gamma_korrekt(input_path, output_path): + """Option 6: Echte Schatten-Aufhellung durch korrektes Gamma > 1""" + try: + img = cv2.imread(input_path) + # Gamma > 1 hellt auf (mein vorheriger Fehler, sry!) + gamma = 1.4 + invGamma = 1.0 / gamma + table = np.array([((i / 255.0) ** invGamma) * 255 + for i in np.arange(0, 256)]).astype("uint8") + + gamma_img = cv2.LUT(img, table) + + # Leichte Sättigung + hsv = cv2.cvtColor(gamma_img, cv2.COLOR_BGR2HSV).astype(np.float32) + h, s, v = cv2.split(hsv) + s = np.clip(s * 1.15, 0, 255) + hsv = cv2.merge((h, s, v)).astype(np.uint8) + final_img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR) + + cv2.imwrite(output_path, final_img, [cv2.IMWRITE_JPEG_QUALITY, 95]) + except Exception as e: + print(f"Fehler Option 6: {e}") + +if __name__ == '__main__': + if os.path.exists(INPUT_FILE): + print("Erstelle Test-Varianten 4 bis 6...") + test_option_4_brillanz(INPUT_FILE, os.path.join(TEST_DIR, 'Option_4_Brillanz.jpg')) + test_option_5_weissabgleich(INPUT_FILE, os.path.join(TEST_DIR, 'Option_5_Weissabgleich.jpg')) + test_option_6_gamma_korrekt(INPUT_FILE, os.path.join(TEST_DIR, 'Option_6_Aufgehellt_Gamma.jpg')) + print("Neue Varianten erstellt!") + else: + print(f"Datei nicht gefunden: {INPUT_FILE}")