zur Auswertung von Videodatein bezüglich auftretender Frequenzen habe ich ein Skript bekommen. Anscheinend waren bzw. sind einige Funktionen veraltet bzw. müssen durch andere ersetzt werden. Ich sehe allerdings, auf Grund meines semiguten Verständnisses für MATLAB, den Fehler nicht.
Die Funktion VideoReader ist eine öffentliche Funktion.
Code:
function[] = evalCAM()
filename='560_0.5_100.avi';
%% auszuwertender Bildteil im 102x500 Subbild("CUT_"):
%windo=[300,25;350,75];%Randbereich
%windo=[200,25;250,75];%Übergangsbereich
windo=[81,51;140,100]; %Reinigungsbereich, rechts unterhalb des Strahlaufpunkts
try load(['CUT_',filename]) catch
mov = VideoReader('560_0.5_100.avi');
cmap = mov(1).colormap;
mov=rmfield(mov(:),'colormap');
for ii=1:length(mov)
mov(ii).cdata=mov(ii).cdata(1:102,500:1000);
end save(['CUT_',filename],'mov','cmap') end
for ii=1:length(mov)
%figure(51);imagesc(mov(ii).cdata(windo(1,2):windo(2,2),windo(1,1):windo(2,1))),drawnow
%figure(52);imagesc(mov(ii).cdata),drawnow
signal(:,:,ii)=mov(ii).cdata(windo(1,2):windo(2,2),windo(1,1):windo(2,1));
end
Die Funktion VideoReader ist eine öffentliche Funktion.
Was ist eine "öffentliche Funktion"?
Die Funcktion
VideoReader
aus der Matlab-Toolbox erzeugt auf jeden Fall kein Objekt mit einem Feld "colormap". Siehe die Dokumentation dieses Befehls.
Deshalb ist der gepostete Code nicht lauffähig. Frage den Autor, wozu das dienen soll, denn erraten kann man das nicht.
Die Variable "cmap" wird im Code gar nicht benötigt. Wozu dient dann der Aufwand, sie zu erzeugen?
das war wahrscheinlich ein ungünstiger Einstieg. Hier noch einmal zur Erklärung der Problemstellung. Ich habe ein 256 x 128 .avi Datei gegeben. Dieses Video ist schwarz-weiß, beinhaltet also nur Grautöne.
Bedingt durch das Auftreffen eines Wasserstrahles entstehen Wellen mit unterschiedlicher Sättigung des Grautons. Die Funktion gray(t) soll mittels FFT ausgewertet werden. Vorher muss allerdings aus dem Video ein Bildabschnitt ausgeschnitten werden, der analysiert werden soll. Zudem möchte ich gerne, dass dieser Abschnitt und deren Umrandung, also Pixel weiß markiert werden soll. Im Anhang ist das qualitativ mal gezeichnet. Ich habe dort schonmal etwas probiert, aber das ist noch nicht das was ich haben will.
Zudem ist sowohl die Funktion "read" als auch "NumberofFrames" veraltet und nur bis 2013b zulässig. Für Version 2015b gibt es andere Funktionen, wobei die Handhabung von denen mir noch nicht klar ist.
for ii=1:numberOfFrames
%figure(51);imagesc(mov(ii).cdata(windo(1,2):windo(2,2),windo(1,1):windo(2,1))),drawnow
%figure(52);imagesc(mov(ii).cdata),drawnow
%signal(:,:,ii)=mov(ii).cdata(windo(1,2):windo(2,2),windo(1,1):windo(2,1));
signal(:,:,ii)=mov(windo(1,2):windo(2,2),windo(1,1):windo(2,1),:,ii);
end
schade das sich noch keiner gemeldet hat. Ich habe versucht die Funktionen von Version 2013b mit den Funktionen von 2015b zu ersetzen. Leider spuckt er folgende Fehlermeldung heraus.
Error using VideoReader/hasFrame
Method 'hasFrame' is not defined for class 'VideoReader' or is removed from MATLAB's search path.
Error in Videoauswertung (line 12)
while hasFrame(mov_handle)
Ich verstehe den Fehler so nicht, denn die Funktion hasFrame ist in der Toolbox VideoReader enthalten.
Mein angepassten, aber mit Fehlern besetzte Code sieht so zurzeit aus:
for ii=1:numberOfFrames
%figure(51);imagesc(mov(ii).cdata(windo(1,2):windo(2,2),windo(1,1):windo(2,1))),drawnow
%figure(52);imagesc(mov(ii).cdata),drawnow
%signal(:,:,ii)=mov(ii).cdata(windo(1,2):windo(2,2),windo(1,1):windo(2,1));
signal(:,:,ii)=mov(windo(1,2):windo(2,2),windo(1,1):windo(2,1),:,ii);
end
Falls da das gleiche Problem auftritt, liegt das Problem in deiner Installation - z.B. dass wie in der Fehlermeldung angegeben Pfade aus irgendeinem Grund vom MATLAB Suchpfad verschwunden sind. Dazu:
pathtool
und dann "Restore default path"
danke vorerst für die Antwort. Ich habe das durchgeführt und den entsprechenden Ordner in der Toolbox mit Videoreader auf Default wieder zurückgesetzt.
Leider funktioniert es immer noch nicht. Ich habe das auch auf einer unabhängigen Lizenz 2016b und einem anderen Rechner probiert, doch dieser Fehler tritt immer wieder auf. Was mache ich falsch?
Im Anhang ist ein kurzes Ausschnitt aus dem Video im mp4 Format, d.h. .avi müsste im Skript noch kurz geändert werden . Es wäre gut, wenn jemand das mal testen könnte. Dann beschaffe ich mir anderweitig eine andere Lizenz. Vielleicht funktioniert es dort.
Das habe ich getestet und auch dabei tritt der Fehler auf. Das tritt aber nicht nur bei hasFrame sondern auch bei readFrame auf.
Dann werde ich dort wohl nicht drum herumkommen. Ich hoffe der Support hilft dort weiter.
Gruß
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.