Verfasst am: 18.11.2012, 20:37
Titel: Video-Frames an Unterprogramm übergeben
Hallo
Wenn man weiß wie ist mein Problem sicher total einfach zu lösen aber nach 8 Stunden Recherche bin ich noch keinen Schritt weiter.
Ich habe ein m-file geschrieben das einen Kamera -Frame aus meiner Webcam ausliest und zwei Positionswerte als Ergebnis liefert.
Ich möchte nun eine Oberfläche aufbauen die mir laufend (dynamisch) diese Werte ausgibt. Dazu habe ich mithilfe des GUI Assistenten eine Oberfläche mit zwei Static Text- Feldern und einem pushbutton aufgebaut.
Dann wird mir ein Code generiert der aus 4 Funktionsblöcken besteht:
1: function varargout = ausgabe(varargin)
2: function ausgabe_OpeningFcn(hObject, eventdata, handles, varargin)
3: function varargout = ausgabe_OutputFcn(hObject, eventdata, handles)
4: function start_Callback(hObject, eventdata, handles, vid)
In der Funktion start_Callback rufe ich nun mein Unterprogramm auf. (Mit der Idee das sobald der Push- Button gedrückt wird, die Werte generiert werden)
Für einzelne Werte funktioniert das soweit ganz gut.
Nun das eigentliche Problem:
Um das Auslesen der Frames zu beschleunigen muss vor dem Aufrufen des m-files ein Vorschaufenster mit dem Livestream angezeigt werden.
Code:
% Konfiguration:
vid = videoinput('winvideo', 1, 'RGB24_640x480');
preview(vid)
Die erste Frage ist nun wo packe ich diese Zeilen in den Code hinein.
Ich hab versucht am Ende des ersten Funktionsblockes die Zeilen einzubinden. Wie gewünscht wird beim Ausführen des Programmes sofort das Vorschaufenster geöffnet. Sobald dann jedoch meine Funktion mit
aufgerufen wird, kommt die Fehlermeldung dass vid nicht deklariert ist.
Ich hab nun herausgefunden dass das daran liegt, da die einzelnen Funktionen nicht einen gemeinsamen Workspace nutzen.
Nun die Hauptfrage:
Wie bekomme ich die Variable vid in das Unterprogramm? Bei meinen Recherchen bin ich immer wieder auf die Stichworte Handls oder globale Varibale gestoßen. Aber auch nach langem Herumprobieren werd ich nicht schlau daraus.
Oder hab ich überhaupt Grundlegend einen Denkfehler?
Ich bin für jeden Vorschlag dankbar.
Verfasst am: 18.11.2012, 23:55
Titel: Re: Video-Frames an Unterprogramm übergeben
Hallo Geppsl,
Ich vemute mal, ohne den Code zu sehen kann ich es ja nicht wissen, dass Du die Variable "vid" im Struct "handles" speichern kannst, welches weiderum nmit den Befehl GUIDATA im Figure-Objekt gespeichert wird. Mit dem gleichen Befehl kannst Du es von dort auch wieder auslesen. Siehe "help guidata" und "doc guidata".
Gruß, Jan
Geppsl
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 19.11.2012, 18:49
Titel: Re: Video-Frames an Unterprogramm übergeben
Hallo Jan
Danke für die Rückmeldung
Der vom GUI-Assistenten erstellte Code sieht so aus:
Code:
%
functionvarargout = ausgabe(varargin) % AUSGABE MATLAB code for ausgabe.fig % AUSGABE, by itself, creates a new AUSGABE or raises the existing % singleton*.
%
% H = AUSGABE returns the handle to a new AUSGABE or the handle to % the existing singleton*.
%
% AUSGABE('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in AUSGABE.M with the given input arguments.
%
% AUSGABE('Property','Value',...) creates a new AUSGABE or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before ausgabe_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to ausgabe_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help ausgabe
% Last Modified by GUIDE v2.5 18-Nov-2012 09:28:08
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @ausgabe_OpeningFcn, ...
'gui_OutputFcn', @ausgabe_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
vid = videoinput('winvideo', 1, 'RGB24_640x480'); %Konfiguration der Kameraschnittstelle
preview(vid)
% --- Executes just before ausgabe is made visible. function ausgabe_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to ausgabe (see VARARGIN)
% Choose default command line output for ausgabe
handles.output = hObject;
% UIWAIT makes ausgabe wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = ausgabe_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
% --- Executes on button press in start. function start_Callback(hObject, eventdata, handles, vid) % hObject handle to start (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [wA, wB]= pos(vid);
set(handles.winkel1, 'string', num2str(wA));
set(handles.winkel2, 'string', num2str(wB));
Die beiden letzten Zeilen am Ende der ersten Funktion und die die letzten 3 Zeilen sind von mir ergänzt. Beim Aufruf meiner Funktion pos(vid) wird vid nicht erkannt.
Ich hab mir mal die Hilfe zu Guidata durchgelesen. Ich glaube dass mir das prinzipiell helfen würde. Jedoch versteh ich das mit den handls nicht nicht so richtig. Hättest du da ein kleines Beispiel für mich wie ich das in den Code einbetten könnte?
Besten Dank
Geppsl
Geppsl
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 19.11.2012, 19:18
Titel: Re: Video-Frames an Unterprogramm übergeben
und das Funktioniert jetzt einwandfrei.
Hier nochmal der ganze Code:
Code:
% --- Executes just before ausgabe is made visible. function ausgabe_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to ausgabe (see VARARGIN)
% Choose default command line output for ausgabe
handles.output = hObject;
handles.vid = videoinput('winvideo', 1, 'RGB24_640x480');
% Update handles structure guidata(hObject, handles);
preview(handles.vid) % UIWAIT makes ausgabe wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = ausgabe_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
% --- Executes on button press in start. function start_Callback(hObject, eventdata, handles, vid) % hObject handle to start (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [wA, wB]= pos(handles.vid);
set(handles.winkel1, 'string', num2str(wA));
set(handles.winkel2, 'string', num2str(wB));
Vielen Dank an dieser Stelle an das tolle Forum! Hat mir schon sehr oft weiter geholfen.
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.