Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:image_processing_python [2023-06-19 19:11] scatalit:image_processing_python [2025-04-10 05:30] (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,0,0,255]$ beschrieben. Ein Pixel, welches Rot in voller Stärke leuchten soll, wird also durch $[255,0,0,255]$ beschrieben.
  
 +=== Transparenz ===
 +Nicht alle Bildformate unterstützen Transparenz, das populäre [[wpde>JPEG]]-Format (`*.jpg`) hat beispielsweise keinen Alpha-Kanal.
 +Im folgenden wird der Alpha-Kanal darum teilweise weggelassen, dann sind die Pixel nicht transparent, ein Bildpunkt besteht nur aus drei statt vier Werten.
 +
 +=== 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('input_image.png') # read image, is stored as numpy-array in variable img
  
-img = io.imread('input_image.png'# read image, is stored as numpy-array in variable img+# make copy of image before you manipulate it 
 +img = copy.deepcopy(img_org)
  
 # here can manipulate img # here can manipulate img
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 (Alpha) nicht einstellen.+   * `dtype=int` stellt sicher, dass im Array nur ganze Zahlen (integers) und keine Nachkommazahlen stehen. Ohne dies kann man die Transparenz (Alpha) nicht einstellen.
  
 ==== Bildbearbeitung ==== ==== Bildbearbeitung ====
Zeile 79: Zeile 89:
 **Bild Original:** **Bild Original:**
 {{ :talit:grumpy_cat_small.png?300 |}} {{ :talit:grumpy_cat_small.png?300 |}}
 +
 +**Flipped**
 +{{ :talit:grumpy_cat_flipped.png?300 |}}
  
 **Bildausschnitte I:** **Bildausschnitte I:**
Zeile 102: Zeile 115:
 {{ :talit:grumpy_cat_sepia.png?300 |}} {{ :talit:grumpy_cat_sepia.png?300 |}}
  
-**Colors Andy Warhol-Style:** +**Invertieren:** 
-{{ :talit:grumpy_cat_warhol.png?600 |}}+{{ :talit:grumpy_cat_invert.png?300 |}}
  
 +**Heller / Dunkler:**
 +{{ :talit:grumpy_cat_bright.png?300 |}}
 +{{ :talit:grumpy_cat_dark.png?300 |}}
 +
 +**Kontrast erhöht:**
 +{{ :talit:grumpy_cat_contrast_high.png?300 |}}
 +
 +**Colors Andy Warhol-Style:** Farbkanal isolieren
 +{{ :talit:grumpy_cat_warhol.png?600 |}}
 +Beispiel oben links (rot): Für alle Pixel werden R und G channels auf $0$ gesetzt.
  
 ===== Aufgaben ===== ===== Aufgaben =====
Zeile 132: Zeile 155:
  
    1. Erstelle auf GitHub ein **neues Repo** mit passendem Namen, z.B. "image\_processing\_python".    1. Erstelle auf GitHub ein **neues Repo** mit passendem Namen, z.B. "image\_processing\_python".
-   1. Gebe das Repo der **LP (anschae) frei**.+   1. Gib das Repo den **LPs frei** (`anschae` / `tkilla77`).
    1. Füge **alle Files**, die du im Verlaufe dieses Themas erstellen/bearbeiten wirst *unaufgefordert* dem Repo hinzu.    1. Füge **alle Files**, die du im Verlaufe dieses Themas erstellen/bearbeiten wirst *unaufgefordert* dem Repo hinzu.
    1. Commite und Pushe immer dann, wenn du Fortschritte gemacht hast.    1. Commite und Pushe immer dann, wenn du Fortschritte gemacht hast.
Zeile 150: Zeile 173:
    1. Nehme das Array aus dem [[https://sca.ksr.ch/doku.php?id=talit:image_processing_python#pixel|Beispiel zu "Pixel"]], also `img = ...` und zeige das Bild mit matplotlib an.    1. Nehme das Array aus dem [[https://sca.ksr.ch/doku.php?id=talit:image_processing_python#pixel|Beispiel zu "Pixel"]], also `img = ...` und zeige das Bild mit matplotlib an.
    1. Verändere es nun so, dass die italienische Flagge angezeigt wird (zu Ehren der Pizza und *nicht* Berlusconi): {{ :talit:italia.png?200 |}}    1. Verändere es nun so, dass die italienische Flagge angezeigt wird (zu Ehren der Pizza und *nicht* Berlusconi): {{ :talit:italia.png?200 |}}
-   1. Wähle nun eine schöne (und einfache) [[https://de.wikipedia.org/wiki/Liste_der_Nationalflaggen|Flagge]] und zeichne sie selbst mithilfe eines Numpy-Arrays.+   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 246: Zeile 269:
  
 ==== Aufgaben B: Bildbearbeitung ==== ==== Aufgaben B: Bildbearbeitung ====
 +
 +=== Aufgabe B1 ===
 +
 +   * Gruppenarbeit (2-3 Personen)
 +   * ohne Computer, Papier
 +   * wird ein Bildbearbeitungseffekt zugeteilt
 +   * überlegt euch, wie man dies umsetzen kann
 +
 +Einfache Effekte:
 +
 +   * Farbkanal isolieren (Andy Warhol)
 +   * Invertieren
 +   * Flippen / Spiegeln
 +   * Bildausschnitt
 +   * 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", sondern sollte sein "Wie kann ich ein Numpy Array erstellen?"
 +
 +=== 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, welches folgendes kann:
 +
 +   * Open-Button: Kann Bild laden
 +   * 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: bearbeitetes Bild speichern
 +
 +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.
 +
 +
 +
  
  
 ===== Lösungen ===== ===== Lösungen =====
 +
 +<nodisp 2>
  
 ++++Aufgabe 1| ++++Aufgabe 1|
Zeile 282: Zeile 353:
 ++++ ++++
  
 +</nodisp>
  • talit/image_processing_python.1687201862.txt.gz
  • Zuletzt geändert: 2023-06-19 19:11
  • von sca