Verfasst am: 12.09.2012, 08:18
Titel: Erstellen von Video aus figure
Hallo,
ich möchte aus einer dreidimensionalen Matrix ein Video erstellen. Diese Matrix enthält aber keine RGB-Farbinformation, weshalb ich das immer über eine figure gemacht habe. Dabei nutze ich den Befehl getframe(), welcher (soviel ich weiß) eine offenen figure im Vordergrund braucht. Meine Frage ist, ob man dieses Video auch ohne figure im Vordergrund erstellen kann. Hier ist der Code mit dem ich bisher gearbeitet habe:
Code:
for h=1:size(Data,3)
mov = figure;
imagesc(Data(:,:,h));
axisimage;
axis off;
colorbar;
caxis([621000]);
M = Daten{1,2}(:,:,h);
tMax = max(M(:));
text(5,8,sprintf(['Zeit: ',num2str(h*tSeg),'[s]','\nTmax:',num2str(tMax),'[C]']),'HorizontalAlignment','left','VerticalAlignment','top','BackgroundColor','w');
MovieMatrix(:,h) = getframe(mov);
close(gcf);
end save([pathResu '/M_' string '.mat'],'Data','-v7.3');
Verfasst am: 12.09.2012, 12:30
Titel: Re: Erstellen von Video aus figure
Hallo Thomas,
dann schau Dir doch mal den Output von GETFRAME an. Diesen kannst Du auch sehr leicht direkt aus einem Array erzeugen und als Input für MOVIE verwenden.
danke für deinen Tip, das wäre super wenn ich diese structure ohne getframe direkt erzeugen könnte, leider funkioniert das bei mir noch nicht. getframe erzeugt ja für jeden frame eine structure wobei das erste Feld cdata eine dreidim. Matrix ist und das zweite Feld die colormap. Ich habe versucht diese Matrix zu erzeugen, dabei wandle ich meinen doubel frame (240x320) in das Format uint8. Jetzt habe ich zwei Probleme: Erstens wie bekomme ich diese drei Dimensionen, und zweitens stimmt das Format nicht überein. Wenn ich mir die structure ansehe die ich mit getframe erzeuge, so hat die Matrix das Format 420x560x3. Wie mache ich aus meiner 240x320 eine passende Matrix? Und wie funktioniert das mit dieser colormap, wenn ich die structure durch getframe erzeuge ist dieses Feld immer leer.
GETFRAME gibt entweder ein [X x Y x 3] cdata und ein leeres map zurück, oder ein [X x Y] cdata und ein [M x 3] colormap. In ersterem Fall handelt es sich um ein RGB Bild, in letzterem um ein Bild mit "indizierten Farben", bei dem die Elemente in der [X x Y] Matrix die Zeilen-Indices der entsprechenden Fareb in der Color-Map sind.
Das Hin- und Her-Transformieren zwischen RGB und indizierten Farben erledigt RGB2IND und IND2RGB.
Für MOVIE kann man sich eines der beiden Formate aussuchen, so dass eine Transformation eigentlich nicht benötigt wird.
Bekomme jetzt aber immer diese Fehlermeldung:
Error using avi
Failed to open file.
Error in avifile (line 173)
aviobj.FileHandle = avi('open',filename);
Error in movie2avi (line 63)
avimov = avifile(filename,varargin{:});
Error in Untitled2 (line 26)
movie2avi(s,'test');
Die Struktur die ich erzeuge ist eigentlich genau dieselbe wie jene die der Befehl getframe() erzeugt, nur das die Matrix cdata bei mir 240x320x3 hat, und bei getframe 504x672x3 hat. Weißt du vielleicht ob das was mit der Fehlermeldung zu tun hat und wenn ja was man da machen kann?
s = struct('cdata','colormap');
% Dies erzeugt: % s.cdata = 'colormap' ! % Du möchtest wahrscheinlich:
s = struct('cdata', cell(1, 5), 'colormap', cell(1, 5));
cdata = uint(RGB);
% Was ist "uint"? Meinst Du "uint8"? % RGB-images haben Werte zwischen 0 und 1. Wenn man dies in ein UINT8 umwandelt, bekommt man die Werte 0 und 1, also nur zwei unterschiedliche Farben. Vielleicht meinst Du:
cdata = uint8(RGB * 255);
Ich kann mir irgendwie nicht vorstellen, dass der Code trotzdem läuft, deshalb verstehe ich nicht, wie Du zu der Fehlermeldung kommst:
"Error using avi. Failed to open file."
Aber sie besagt offensichtlich, dass das File nicht geöffnet werden kann. Ist es bereits offen? Hast Du Schreibrechte im entsprechenden Ordner?
Gruß, Jan
Einstellungen und Berechtigungen
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
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.