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

writeVideo ändert Pixelgröße?

 

GtrAngus
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.06.13
Wohnort: Bayreuth
Version: ---
     Beitrag Verfasst am: 16.07.2013, 10:43     Titel: writeVideo ändert Pixelgröße?
  Antworten mit Zitat      
Hallo Leute,

hab mir einen Code zusammengeschrieben der aus 2 Schleifen besteht.

In der 1. Schleife wird ein Video einliest,eingelesen, die einzelnen Bilder bearbeitet, zugeschnitten usw. Die fertig bearbeiteten Bilder werden in der Variable

Code:
vid(:,:,k)


gespeichert, wobei k von 1 bis fram durchläuft. Hierbei ist fram einfach die Anzahl der Bilder(Frames) des gesamten Videos. Soweit so gut.

In der 2. Schleife will ich die Variable vid einlesen und in ein neues AVI-Video speichern. Der Code dazu sieht folgender Maßen aus:

Code:
cd('Schwarz');

name = 'Fertig2';
writerObj2 = VideoWriter(name,'Uncompressed AVI');
writerObj2.FrameRate = rate;
open(writerObj2);

for k = 1 : fram
    bild = vid(:,:,k); %Abmessungen 106x90 Pixel
    imagesc(bild), colormap(gray);
    currframe = getframe;
    writeVideo(writerObj2,currframe);
end

close(writerObj2);
cd ..



Nun zum eigentlichen Problem:
Der Code zum Video schreiben funktioniert an sich auch. Sobald er ausgeführt wird, erscheint ein kleines Bild das mir die aktuell geschriebenen Bilder anzeigt (wegen imagesc(bild) ). Diese kleine Vorschau hat die Abmessungen 106x90 Pixel, so wie ich es haben will. Öffne ich danach das Video mit MatLab oder einem anderen Programm wie ImageJ, so hat das Video die Abmessungen 435x344 Pixel!!!

Und ich verstehe beim besten Willen nicht woran das liegt Sad Schließlich wird es ja beim Schreiben kurz angezeigt mit den richtigen Pixel-Werten. Hat jemand eine Idee?

Weiterhin: Öffne ich nach dem Schreiben das letzte Bild mit imagesc(bild), so hat das auch die richtigen Abmessungen. Der Unterschied zwischen den Originalmaßen und den neuen, ist in etwa ein Faktor 4. Bei der Breite liegt er etwa bei 4.0654, bei der Höhe bei 3.7802 .

Gruß GtrAngus
Private Nachricht senden Benutzer-Profile anzeigen


GtrAngus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.06.13
Wohnort: Bayreuth
Version: ---
     Beitrag Verfasst am: 18.07.2013, 12:16     Titel:
  Antworten mit Zitat      
Hab das Problem lösen können. Weiß leider bislang nicht so recht woran es liegt, aber falls jemand das Gleiche Problem hat, hier meine Lösung bzw. veränderten Einstellungen:

Code:

for k = 1 : fram
    bild = uint8(vid(:,:,k));
    imshow(bild);
    currframe = getframe;
    writeVideo(writerObj2,currframe);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 18.07.2013, 15:38     Titel:
  Antworten mit Zitat      
Hallo

wahrscheinlich lag es an IMAGESC, dass füllt die Axes komplett aus, keine automatische Skalierung, also wird das Bild so zu sagen auf Achsen gestreckt.
GETFRAME macht ja Snapshot von Axes, und da das Bild auf Axes gestreckt wurde, kommt die falsche Größe aus

wenn du das BILD in der ORIGINAL Größe haben willst, dann musst du die AXES auf die Größe des Bildes skalieren. Was wohl die IMSHOW macht

ehrlich gesagt brauchst du doch so ein Weg über GETFRAME nicht , du kannst doch direkt die Bilder zu einem Movie setzen

etwa so:
Code:


for k = 1 : fram
    bild = uint8(vid(:,:,k));
    currframe.cdata = bild;
    currframe.colormap=[];
    writeVideo(writerObj2,currframe);
end
 
 
Private Nachricht senden Benutzer-Profile anzeigen
 
GtrAngus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.06.13
Wohnort: Bayreuth
Version: ---
     Beitrag Verfasst am: 30.07.2013, 13:43     Titel:
  Antworten mit Zitat      
Hab gerade mal deinen Vorschlag ausprobiert. Funktioniert leider nicht so ganz. Liegt wahrscheinlich daran, dass ich zum einen ein "uncompressed AVI" haben will, zum anderen sind die Daten aber eigentlich nur 8bit Graustufenbilder. AVI scheint da wohl mit 24bit = 8bit pro Farbkanal zu arbeiten.

Auf jeden Fall, wenn ich ein "gray" ergänze, wird das Video zwar geschrieben, aber es ist viel zu hell.

Irgend eine Idee was ich noch ergänzen muss?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 31.07.2013, 13:30     Titel:
  Antworten mit Zitat      
Hallo


dann versuche mal, so den Farbkanal zu erzeugen:
Code:


for k = 1 : fram
    bild = uint8(vid(:,:,k));
    currframe.cdata = cat(3,bild,bild,bild);
    currframe.colormap=[];
    writeVideo(writerObj2,currframe);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
GtrAngus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.06.13
Wohnort: Bayreuth
Version: ---
     Beitrag Verfasst am: 18.08.2013, 01:06     Titel:
  Antworten mit Zitat      
Jup, so funktioniert es wunderbar! Smile Vielen Dank!
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.