Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| talit:image_processing_python [2023-06-20 18:26] – [Aufgabe B1] sca | talit:image_processing_python [2025-06-15 19:41] (aktuell) – [Aufgabe 2: Fun with Flags] hof | ||
|---|---|---|---|
| Zeile 24: | Zeile 24: | ||
| Ein Pixel, welches Rot in voller Stärke leuchten soll, wird also durch $[255, | Ein Pixel, welches Rot in voller Stärke leuchten soll, wird also durch $[255, | ||
| + | === Transparenz === | ||
| + | Nicht alle Bildformate unterstützen Transparenz, | ||
| + | Im folgenden wird der Alpha-Kanal darum teilweise weggelassen, | ||
| + | |||
| + | === Beispiel === | ||
| Betrachte das folgende Bild: | Betrachte das folgende Bild: | ||
| Zeile 45: | Zeile 50: | ||
| Der folgende Code liest das Bild `input_image.png` (im gleichen Ordner wie Python-File) ein und speichert es unter dem Namen `output_image.png`. Achtung: Das Bild `output_image.png` wird bei jedem Ausführen überschrieben. | Der folgende Code liest das Bild `input_image.png` (im gleichen Ordner wie Python-File) ein und speichert es unter dem Namen `output_image.png`. Achtung: Das Bild `output_image.png` wird bei jedem Ausführen überschrieben. | ||
| <code python> | <code python> | ||
| + | import numpy as np | ||
| from skimage import io # to read image | from skimage import io # to read image | ||
| import matplotlib.pyplot as plt # to show (and save) image | import matplotlib.pyplot as plt # to show (and save) image | ||
| + | import copy | ||
| + | |||
| + | img_org = io.imread(' | ||
| - | img = io.imread(' | + | # make copy of image before you manipulate it |
| + | img = copy.deepcopy(img_org) | ||
| - | # here can manipulate img | + | # TODO: manipulate img here |
| pass | pass | ||
| Zeile 73: | Zeile 83: | ||
| * Die zweite Zahl gibt die Anzahl Pixel in horizontale Richtung ($x$) an. | * Die zweite Zahl gibt die Anzahl Pixel in horizontale Richtung ($x$) an. | ||
| * Die dritte Zahl gibt an, dass für jedes Pixel $4$ Werte (RGB und Alpha) benötigt werden. | * Die dritte Zahl gibt an, dass für jedes Pixel $4$ Werte (RGB und Alpha) benötigt werden. | ||
| - | * `dtype=int` stellt sicher, dass im Array nur ganze Zahlen (integers) und keine Nachkommazahlen stehen. Ohne dies kann man die Transparent | + | * `dtype=int` stellt sicher, dass im Array nur ganze Zahlen (integers) und keine Nachkommazahlen stehen. Ohne dies kann man die Transparenz |
| ==== Bildbearbeitung ==== | ==== Bildbearbeitung ==== | ||
| Zeile 145: | Zeile 155: | ||
| 1. Erstelle auf GitHub ein **neues Repo** mit passendem Namen, z.B. " | 1. Erstelle auf GitHub ein **neues Repo** mit passendem Namen, z.B. " | ||
| - | | + | |
| 1. Füge **alle Files**, die du im Verlaufe dieses Themas erstellen/ | 1. Füge **alle Files**, die du im Verlaufe dieses Themas erstellen/ | ||
| 1. Commite und Pushe immer dann, wenn du Fortschritte gemacht hast. | 1. Commite und Pushe immer dann, wenn du Fortschritte gemacht hast. | ||
| Zeile 161: | Zeile 171: | ||
| 1. Studiere die [[image_processing_python# | 1. Studiere die [[image_processing_python# | ||
| 1. Erstelle ein Jupyter-Notebook `pixel_art.ipynb` im Repo und arbeite darin. | 1. Erstelle ein Jupyter-Notebook `pixel_art.ipynb` im Repo und arbeite darin. | ||
| - | 1. Nehme das Array aus dem [[https:// | + | 1. Nehme das Array aus dem [[talit: |
| - | 1. Verändere es nun so, dass die italienische Flagge angezeigt wird (zu Ehren der Pizza und *nicht* Berlusconi): {{ : | + | 1. Verändere es nun so, dass die italienische Flagge angezeigt wird (zu Ehren der Pizza): {{ : |
| - | 1. Wähle nun eine schöne (und einfache) [[https:// | + | 1. Wähle nun eine schöne (und einfache) [[wpde>Liste_der_Nationalflaggen|Flagge]] und zeichne sie selbst mithilfe eines Numpy-Arrays. |
| === Aufgabe 3: Pixel Art === | === Aufgabe 3: Pixel Art === | ||
| Zeile 271: | Zeile 281: | ||
| * Farbkanal isolieren (Andy Warhol) | * Farbkanal isolieren (Andy Warhol) | ||
| * Invertieren | * Invertieren | ||
| - | * Flippen | + | * Flippen |
| * Bildausschnitt | * Bildausschnitt | ||
| * Verpixeln | * Verpixeln | ||
| + | * (Black n' White) | ||
| + | |||
| + | === Aufgabe B2 === | ||
| + | |||
| + | Programmiere mind. zwei dieser Effekte. Mache es selbst und ohne direkte Hilfe (z.B. von ChatGPT). | ||
| + | |||
| + | Hole dir Hilfe nur für *allgemeine* Fragen. Prompt in ChatGPT darf nicht sein "Wie invertiere ich ein Bild in Python", | ||
| + | |||
| + | === Aufgabe B3 (optional) === | ||
| + | |||
| + | Überlege dir andere oder eigene Effekte, probiere aus, sei kreativ und erstelle damit neue Versionen eine Bilds (z.B. der Grumpy Cat). | ||
| + | |||
| + | === Aufgabe B4: Eigenes Bildbearbeitungsprogramm (optional) === | ||
| + | |||
| + | Programmiere ein eigenes Bildbearbeitungsprogramm mit einer graphischen Oberfläche, | ||
| + | |||
| + | * Open-Button: | ||
| + | * dieses wird angezeigt | ||
| + | * einige Effekte, die man anwählen und einstellen kann, z.B. mit: | ||
| + | * Checkboxes | ||
| + | * Sliders | ||
| + | * bearbeitetes Bild wird angezeigt, in real time updated | ||
| + | * Save-Button: | ||
| + | |||
| + | Tipps: | ||
| + | |||
| + | * Verwende dazu eine Python-Library für das Erstellen von GUI, wie z.B. **PyQT**. | ||
| + | * Verwende z.B. ChatGPT um das Grundgerüst des GUI zu erstellen. | ||
| + | |||
| Zeile 279: | Zeile 318: | ||
| ===== Lösungen ===== | ===== Lösungen ===== | ||
| + | |||
| + | <nodisp 2> | ||
| ++++Aufgabe 1| | ++++Aufgabe 1| | ||
| Zeile 312: | Zeile 353: | ||
| ++++ | ++++ | ||
| + | </ | ||