Vertiefung - SW-Bilder in Graustufenbilder
Implementierung - Herauslesen eines SW-Bildes
Max und Moritz haben herausgefunden, dass Tine ihr Geheimnis entdeckt hat und verschicken nun Bilder, die zu groß sind, um sie per Hand zu lösen. Jetzt möchte sie ein Programm schreiben, das als Eingabe das bearbeitete Bild (im PGM-Format) erwartet und das geheime Bild (PBM-Format) speichert.
Tine hat für Python das Modul Pillow (Bibliothek PIL) entdeckt, mit dem man Bilder einlesen und bearbeiten kann (du kannst das Modul hier herunterladen und installieren).
Einen Teil des Programmes hat sie schon geschrieben, kannst du ihr weiter helfen?
from PIL import Image
def swGeheimesBildLesen(oeffentlichesBild, geheimesBild):
oBild = Image.open(oeffentlichesBild) # PGM
gBild = Image.new('1',oBild.size) # PBM
for x in range (oBild.size[0]):
for y in range (oBild.size[1]):
# ...???
gBild.save(geheimesBild)
Mit dem Befehl bild.putpixel( (x,y) ,f)
kannst du in dem Objekt "bild" den Pixel an der Stelle
(x,y) auf den Farbwert f setzen (bei s/w-Bildern also nur die Werte 0/1).
Mit dem Befehl bild.getpixel( (x,y) )
erhältst du den Farbwert an der Stelle (x,y).
Weiße Pixel bekommen den Wert 255, schwarze den Wert 0.
Aufgabe 1: Teste dein Programm
Die Jungs haben in folgendem Bild ihre Planung für den heutigen Nachmittag versteckt. Kannst du mit deinem Programm herausfinden was sie vor haben? Lade dazu "blume.pgm" herunter.
PBM und PGM Formate lassen sich mit IrfanView erstellen und anzeigen. Um PIL verwenden zu können, muss das Bild binär abgespeichert werden.
Aufgabe 2:
Was hat Max alles in seinem Urlaubsbild versteckt?
Implementierung - Verstecken
Tine möchte jetzt auch selbst so große Bilder verstecken. Dazu möchte sie sich ein Programm schreiben.
Aufgabe 3: Programm zum Verstecken
In welchen Situationen muss der Grauwert des Pixels geändert werden? Vervollständige den Quellcode.
from PIL import Image
def swVerstecken(oeffentlichesBild, geheimesBild, ergebnisBild):
oBild=Image.open(oeffentlichesBild) # PGM
gBild=Image.open(geheimesBild) # PBM
groesse= gBild.size
for x in range(groesse[0]):
for y in range(groesse[1]):
oPixel=oBild.getpixel((x,y))
gPixel=gBild.getpixel((x,y))
if ??? :
oBild.putpixel((x,y),oPixel+1)
# ???
oBild.save(ergebnisBild) # PGM
Aufgabe 4: Bilder Verstecken
Erstelle dir selbst ein Bild im PGM- und PBM-Format und verstecke das PBM-Bild. Achte dabei auf die Größe der Bilder. Lasse anschließend deinen Nachbarn herausfinden, was du versteckt hast.
Quellen
-
[1]:
Abbildung: Blume
- Urheber: AB AS
- Lizenz: Inf-Schule.de
Abbildung: Verstecktes Bild in Blume - Lizenz:Wikimedia Commons -
[2]:
Abbildung: Urlaub
- Urheber: AB AS
- Lizenz: Inf-Schule.de
Abbildung: 1. Verstecktes Bild in Urlaub - Lizenz:Wikimedia Commons
Abbildung: 2. Verstecktes Bild in Urlaub - Urheber: AB AS - Lizenz: Inf-Schule.de