Bild Bitweise einlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
erfurter_astronarchen
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?
Benutzeravatar
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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
maxxle
User
Beiträge: 12
Registriert: Dienstag 12. Juli 2005, 13:54

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 ???
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich habe es nicht so verstanden, das jedes Bildpixel "eingelesen" werden soll, sondern ehr eine HEX-Editor ansicht der Datei...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

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?
Garnicht! Die kleinste Dateneinheit, die der Computer verschieben, kopieren oder bearbeiten kann, ist das Byte. Ein Byte sind acht Bit.

Du kannst also nur Byteweise einlesen. Wenn du die einzelnen Bits eines Bytes herrausbekommen willst, musst du mit Bitmasken und Schiebeoperatoren arbeiten.
BlackJack

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?
Wenn's nicht gerade das "PBM plain" Format ist, dann ist das nicht so direkt machbar wie die anderen ja schon geschrieben haben.

Schau Dir mal die Python Imaging Library an, damit kannst Du viele gängige Grafikformate einlesen die einzelnen Pixel auslesen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Maxxle: egal ob BMP oder JPEG, du kannst beides Byteweise auslesen. Übrigens gibt es auch RLE komprimierte BMPs.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Kleines Beispiel mit PIL:

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')
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.
Antworten