Bild Bitweise einlesen
-
- User
- Beiträge: 15
- Registriert: Mittwoch 8. Juni 2005, 18:33
Heyho, wie kann ich ein Bild bitweise einlesen. Ich möchte nur die "einsen und nullen" des Bildes haben, geht das?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
mit file( r"c:\meinBild.jpg", "rb" ) kannst du jede Datei als Binärdaten einlesen... Danach interieren und jedes Zeichen in binärdaten wandeln... Wie das genau geht, weiß ich spontan auch nicht... Vielleicht hilft http://www.python-forum.de/viewtopic.php?t=2188 weiter...
Ich denke das kommt auf den Bildtypen an.
Wenn es sich um ein .bmp handelt kannst du es einfach mit read() einlesen.
Aber mit einem kompirimierten jpeg wird das warscheinlich etwas schwieriger, weil die Daten ja komprimiert vorliegen - das müsste man dann ja prinzipiell erst mal entkompirimieren ???
Wenn es sich um ein .bmp handelt kannst du es einfach mit read() einlesen.
Aber mit einem kompirimierten jpeg wird das warscheinlich etwas schwieriger, weil die Daten ja komprimiert vorliegen - das müsste man dann ja prinzipiell erst mal entkompirimieren ???
Garnicht! Die kleinste Dateneinheit, die der Computer verschieben, kopieren oder bearbeiten kann, ist das Byte. Ein Byte sind acht Bit.erfurter_astronarchen hat geschrieben:Heyho, wie kann ich ein Bild bitweise einlesen. Ich möchte nur die "einsen und nullen" des Bildes haben, geht das?
Du kannst also nur Byteweise einlesen. Wenn du die einzelnen Bits eines Bytes herrausbekommen willst, musst du mit Bitmasken und Schiebeoperatoren arbeiten.
Wenn's nicht gerade das "PBM plain" Format ist, dann ist das nicht so direkt machbar wie die anderen ja schon geschrieben haben.erfurter_astronarchen hat geschrieben:Heyho, wie kann ich ein Bild bitweise einlesen. Ich möchte nur die "einsen und nullen" des Bildes haben, geht das?
Schau Dir mal die Python Imaging Library an, damit kannst Du viele gängige Grafikformate einlesen die einzelnen Pixel auslesen.
Kleines Beispiel mit PIL:
Das Bild wird in Graustufen umgewandelt und je nach dem ob der Wert eines Pixels über oder unter 50% Helligkeit liegt, wird ein Leerzeichen oder ein '*' ausgegeben.
Code: Alles auswählen
import sys
import Image
#
# Open image and convert it to luminosity mode, i.e. grayscale.
# Then print image with asterisks and spaces.
#
img = Image.open('test.png').convert('L')
for row in xrange(img.size[1]):
for column in xrange(img.size[0]):
pixel_value = img.getpixel((column, row))
sys.stdout.write(' *'[int(pixel_value < 128)])
sys.stdout.write('\n')