Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Pixel und Linien zeichnen

Nach dieser Lektion: Ich kann Pixel auf einem Raster ansprechen und eine Linie Schritt für Schritt zeichnen.

Lektion, 60 Min.3 BefehleComputer-Vision-Lab: Pixel, Schwellenwerte und Objekte zählen in JupyterLab

Wie ein Computer eine Linie zeichnet

Computergrafik zeichnet Bilder aus Pixeln, kleinen Bildpunkten in einem Raster, und jedes Pixel trägt eine Farbe. Eine Linie auf dem Bildschirm ist nur eine Auswahl von Pixeln, die ein Programm der Reihe nach einschaltet.

Wer das versteht, kann Linien, Flächen und später ganze Szenen selbst berechnen. Das üben Sie in diesem Modul mit Python, ohne Zeichenprogramm.

Am Ende dieser Lektion

Notiz

Ich kann Pixel auf einem Raster ansprechen und eine Linie Schritt für Schritt zeichnen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Pixelein Bildpunkt mit einer Farbe
Rasteralle Pixel in Zeilen und Spalten
Koordinatenzwei Zahlen, die ein Pixel benennen(3, 2)
Steigungwie viele Zeilen die Linie je Spalte steigt
Rasterungeine Form in Pixel umsetzen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Jedes Pixel hat zwei Koordinaten

Ein Pixel wird durch zwei Zahlen benannt: x ist die Spalte und zählt nach rechts, y ist die Zeile und zählt nach unten. Gezählt wird ab null.

Das Pixel (0, 0) liegt also oben links. Bei einem Bild mit 4 Spalten und 3 Zeilen liegt das Pixel unten rechts bei (3, 2).

Beispiel: Bild mit 4 Spalten, 3 Zeilen

PixelSpalte xZeile yLage
(0, 0)00oben links
(3, 0)30oben rechts
(0, 2)02unten links
(3, 2)32unten rechts

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Das Lab zeichnet eine Linie in eine Datei

Der Befehl legt ein schwarzes Bild mit 16 Spalten und 8 Zeilen an und zeichnet eine weiße Linie von (1, 1) nach (14, 6). Er speichert das Bild als linie.png und liest drei Pixel zurück.

Er gibt (16, 8) 255 255 0 aus: die Größe, dann Weiß am Anfang, Weiß am Ende und Schwarz bei (1, 6), weit unter der Linie. Die Datei öffnen Sie danach in JupyterLab.

Eine Linie in linie.png zeichnen

Befehl
docker exec jupyter python3 -c "from PIL import Image, ImageDraw; b = Image.new('L', (16, 8), 0); d = ImageDraw.Draw(b); d.line([(1, 1), (14, 6)], fill=255); b.save('linie.png'); print(b.size, b.getpixel((1, 1)), b.getpixel((14, 6)), b.getpixel((1, 6)))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die weißen Pixel der Linie zählen

Befehl
docker exec jupyter python3 -c "from PIL import Image; b = Image.open('linie.png'); print(sum(1 for p in b.getdata() if p == 255))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Linie wählt für jede Spalte eine Zeile

Eine flache Linie läuft von links nach rechts. Für jede Spalte x rechnet das Programm aus, in welcher Zeile y die Linie dort liegt. Es rundet auf eine ganze Zahl, denn Pixel haben nur ganze Koordinaten.

Dazu braucht es zwei Unterschiede: dx, die Breite von Anfang bis Ende, und dy, die Höhe. Die Linie steigt je Spalte um dy geteilt durch dx Zeilen.

Beispiel: Linie von (1, 1) nach (14, 6)

Spalte xSchritte seit x0y genauy gerundet
101,001
211,381
321,772
542,543
873,694
14136,006

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Linie Spalte für Spalte berechnen

Code: python
# Die Linie von (0, 0) nach (8, 3), Spalte für Spalte.
x0 = 0
y0 = 0
x1 = 8
y1 = 3
dx = x1 - x0
dy = y1 - y0
for x in range(x0, x1 + 1):
    y = y0 + (2 * dy * (x - x0) + dx) // (2 * dx)
    print("Spalte", x, "Zeile", y)
# Ändern Sie y1 auf 8 und starten Sie erneut: Die Linie wird diagonal.

Die Pixel der Linie als Buchstaben ansehen

Der nächste Befehl druckt das Bild als Text: # für ein weißes Pixel, . für ein schwarzes. Das sind 8 Zeilen mit je 16 Zeichen.

Die Zeichen # wandern von oben links nach unten rechts, je Zeile zwei bis drei nebeneinander. Das Bild hat 14 weiße Pixel, eines je Spalte von 1 bis 14.

Das Bild als Buchstaben drucken

Befehl
docker exec jupyter python3 -c "from PIL import Image; b = Image.open('linie.png'); print('\n'.join(''.join('#' if b.getpixel((x, y)) else '.' for x in range(16)) for y in range(8)))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, y wachse nach oben, wie im Koordinatensystem aus dem Mathematikunterricht. In einem Bild zählt y aber von der obersten Zeile nach unten. Eine Linie, die auf dem Bildschirm steigt, hat darum ein kleiner werdendes y.

Über dieses Lab und seinen Quellcode: Computer-Vision-Lab: Pixel, Schwellenwerte und Objekte zählen in JupyterLab

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.