Forum: PC-Programmierung Bitmap in .txt konvertieren.


von GS (chromosoma)


Lesenswert?

Hallo,


Ich möchte ein  Bild aus BMP. in TXT Datei konvertieren.
Am Ausgang soll ein pixel array stehen, zB. 
255(r),128(g),34(b),127(r),200(g), 100(b)  usw. oder S/W.

Hat jemand eine Idee wie man sowas  machen kann?
Gibt es vllt. schon eine fertige Lösung?

von Magic S. (magic_smoke)


Lesenswert?

Klar geht das. Aber darf ich fragen wozu? Meine, das .BMP-Format ist ja 
schon eine riesen Speicherplatzverschwendung, aber als Textdatei 
explodiert die Dateigröße erst recht.

von GS (chromosoma)


Lesenswert?

Ich will ein Bild  via UART  an FPGA-Board übersenden.

von Dr. Sommer (Gast)


Lesenswert?

Böser Kommunist schrieb:
> Ich will ein Bild  via UART  an FPGA-Board übersenden.
cat meinBild.bmp >> /dev/ttyS0

und schon hast es am FPGA-Board. Im FPGA musst nur noch den Header 
überspringen und dann kommen die Bilddaten wunderschön leicht 
verarbeitbar binär rein. Wozu erst kompliziert die Zahlen dezimal 
darstellen und im FPGA wieder binär zurückrechnen?! Das BMP-Format ist 
supereinfach zu verarbeiten (kannst quasi direkt so in Video-RAM => 
RAMDAC schieben), ganz im Gegensatz zu deinem komischen Textformat.

von Magic S. (magic_smoke)


Lesenswert?

Okay. Wieso geht das nicht mit 8-Bit-Worten? Dem UART ist es egal ob Du 
Text oder Binärdaten überträgst.

Wenn es nur druckbare Zeichen sein dürfen, dann kannst Du auch sowas wie 
ein base64_encode verwenden, das wird z.B. in eMails gemacht.

Aber auf jeden Fall würd ich kein Bitmap dermaßen in Textform aufblasen 
wie Du es vor hast. Sonst wird aus einer 2 MByte .BMP-Datei eine 9..10 
MByte Textdatei. Sowas willst Du nicht durch einen UART jagen.

von g457 (Gast)


Lesenswert?

> Ich will ein Bild  via UART  an FPGA-Board übersenden.

Mögliche sinnvolel Herangehensweisen:
- bring dem FPGA ein vernünftiges Format bei, z.B. JPEG oder PNG.
- nimm fertige, primitiv-einfach zu benutzende Bibliotheken wie opencv 
und boost und schreib Dir ein kurzes Progrämmchen für die Aufgabe
- nimm convert aus ImageMagick um das Bild als Text zu dumpen, parse das 
Ergebnis adäquat..
1
$ time convert some.jpg out.txt
2
real    6m23.164s
3
user    6m21.200s
4
sys     0m1.484s
5
$ echo .oO\(nichtgradschnell\) > /dev/null
6
$ ls -sh out.txt 
7
855M out.txt
8
$ head -n 3 out.txt 
9
# ImageMagick pixel enumeration: 5184,3456,255,srgb
10
0,0: ( 41, 61, 98)  #293D62  srgb(41,61,98)
11
1,0: ( 26, 46, 79)  #1A2E4F  srgb(26,46,79)

von Magic S. (magic_smoke)


Lesenswert?

855 Megabyte Ja das ist doch mal 'ne Ansage. Da freut sich der UART.

von g457 (Gast)


Lesenswert?

> Da freut sich der UART.

Der TO hat doch nach einem ineffizienten Übertragungsformat gefragt, 
oder hab ich da was falsch verstanden? ∗eg∗

von Mr. X (Gast)


Lesenswert?

g457 schrieb:
> - bring dem FPGA ein vernünftiges Format bei, z.B. JPEG ...

Nicht jeder möchte, dass die Bilder bei der Übertragung verändert und 
vermatscht werden. Bei Bildkompression auf der Übertragungsstrecke 
sollte man sich über die Bildinhalte im klaren sein.

von GS (chromosoma)


Lesenswert?

Hallo,

danke für die Info.  Die Geschwindigkeit  spielt zweitrangige Rolle, 
die Bilder (ca. 512x512) werden nur zur Mustererkennung verwendet, und 
werden nur  ab und zu auf FLASH-Speicher übertragen.
Ich werde die oben genannte Vorschläge probieren=)

von g457 (Gast)


Lesenswert?

>> - bring dem FPGA ein vernünftiges Format bei, z.B. JPEG ...
[oder PNG]
>
> Nicht jeder möchte, dass die Bilder bei der Übertragung verändert und
> vermatscht werden. Bei Bildkompression auf der Übertragungsstrecke
> sollte man sich über die Bildinhalte im klaren sein.

..deswegen nimmt man dafür selbstredend das Format, in dem die Originale 
eh vorliegen (z.B. JPEG) oder ein verlustfreie komprimierendes welches.

> die Bilder (ca. 512x512) werden nur zur Mustererkennung verwendet

Ok, das ist nicht groß. Klingt aber auch nicht nach JPEG :-)

Übrigens der Vollständigkeit wegen: Sowohl BMP (RLE) als auch TIFF (LZW 
und andere (und verlustbehaftet JPEG)) können verlustfrei packen - 
Effizienz inhaltsabhängig.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Wohl am einfachsten von allen Bildformaten, inclusive ausgetexteten 
Beispielen:

http://de.wikipedia.org/wiki/Portable_Anymap

convert aus ImageMagick versteht diese Formate.  Um die ASCII-Variante 
zu erhalzten un nicht die Binärvariante, bei convert die Komprimirung 
ausstellen, d.h. mit -compress None aufrufen.

von GS (chromosoma)


Lesenswert?

Hi!
Ja,  BPM=> PPM oder PGM ist genau was ich brauche.
TNX

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.