WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

JPEG aus Variable lesen

 

Nicolas S.
Forum-Century

Forum-Century


Beiträge: 146
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 26.10.2012, 09:25     Titel: JPEG aus Variable lesen
  Antworten mit Zitat      
Hallo zusammen,
ich habe in Matlab eine Variable, die sämtlichen Inhalt eines JPEGs enthält, nennen wir sie "b". Das Ganze will ich als Bild "A" behandeln, wie es z.B. mit "imread" eingelesen werden könnte. Folgendes würde also funktionieren:
Code:

FID = fopen('temp.jpg','w')
for i = 1:numel(b)
   fwrite(FID,b(i));
end
fclose(FID);
A = imread('temp.jpg');
 

Allerdings habe ich keine Lust, das Ganze über die Festplatte laufen zu lassen, da das recht langsam ist und recht viele Bilder anfallen.

Hat jemand einen Tipp, wie das direkt in Matlab funktionieren kann?

Viele Grüße
Nicolas
_________________

--
The programmer suggested it.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.10.2012, 09:51     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht verstehe ich die Frage nicht ganz, aber ein "Bild" ist in MATLAB in der Regel ja nichts anderes als eine 2D- oder 3D-Matrix, je nachdem ob das Bild indiziert oder true color ist.
Es sollte also möglich sein, z.B. mit reshape und ähnlichen die Information aus b in das gewünschte Format umzuwandeln. Frage also: wie genau sieht b gegenwärtig aus?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nicolas S.
Themenstarter

Forum-Century

Forum-Century


Beiträge: 146
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 26.10.2012, 09:55     Titel:
  Antworten mit Zitat      
Hallo Harald,
"b" ist ein eindimensionales Array aus uint8, das die Binärdaten eines JPEG-Bildes enthält, d.h. wenn ich "b" unverändert in eine Datei speichere, entsteht eine gültige *.jpg-Datei.

Was ich allerdings will ist ein Bild im Matlab-Format (also die z.B. 640x480x3-Matrix mit den RGB-Werten).

Viele Grüße
Nicolas
_________________

--
The programmer suggested it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.10.2012, 10:08     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich es richtig verstehe, ist es also "lediglich" ein Problem der Anordnung der Werte, müsste also mit RESHAPE zu lösen sein?

Ich muss gestehen, dass ich nicht weiß, in welcher Reihenfolge die Bildinformationen in einem JPG gespeichert sind, insofern kann ich da leider auch nicht genauere Vorschläge anbieten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nicolas S.
Themenstarter

Forum-Century

Forum-Century


Beiträge: 146
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 26.10.2012, 10:12     Titel:
  Antworten mit Zitat      
Hallo Harald,
nein, das Problem ist, daß JPEG ein komprimiertes Binärformat ist, in dem Daten komplett anders als in Matlab abgelegt sind. "imread" dekodiert dieses Binärformat, läßt sich aber meines Wissens nach nur auf eine Datei und nicht auf eine Variable anwenden.

Viele Grüße
Nicolas
_________________

--
The programmer suggested it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.10.2012, 10:26     Titel:
  Antworten mit Zitat      
Hallo,

jetzt habe ich das Problem zwar verstanden, habe aber leider keine Lösung dafür. Letztlich werden beim Einlesen von JPG mex-Dateien verwendet, man kann also auch nicht einfach vorhandenen Code für seine Zwecke anpassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.10.2012, 15:29     Titel: Re: JPEG aus Variable lesen
  Antworten mit Zitat      
Hallo Nicolas S.,
Zunächst würd ich den Code vereinfachen und unbedingt den UINT8-Classifier einfügen:
Code:

FID = fopen('temp.jpg','w')
fwrite(FID,b, 'uint8');
fclose(FID);

Ich vermute mit MEMMAPFILE liesse sich das File auch effizient im RAM erstellen. Ob IMREAD damit zurecht kommt ist mir aber nicht klar.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.