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?
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.
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.
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.
> 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) |
855 Megabyte Ja das ist doch mal 'ne Ansage. Da freut sich der UART.
> Da freut sich der UART.
Der TO hat doch nach einem ineffizienten Übertragungsformat gefragt,
oder hab ich da was falsch verstanden? ∗eg∗
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.
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=)
>> - 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.