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

Video-Frames an Unterprogramm übergeben

 

Geppsl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2012, 20:37     Titel: Video-Frames an Unterprogramm übergeben
  Antworten mit Zitat      
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

Code:

[wA, wB]= pos(vid);
 


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.


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.11.2012, 23:55     Titel: Re: Video-Frames an Unterprogramm übergeben
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Geppsl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2012, 18:49     Titel: Re: Video-Frames an Unterprogramm übergeben
  Antworten mit Zitat      
Hallo Jan

Danke für die Rückmeldung
Der vom GUI-Assistenten erstellte Code sieht so aus:

Code:
%
function varargout = 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',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

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;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes ausgabe wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = 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: ---
     Beitrag Verfasst am: 19.11.2012, 19:18     Titel: Re: Video-Frames an Unterprogramm übergeben
  Antworten mit Zitat      
Ok vielen Dank aber es hat sich erledigt.

Ich habs geschafft vid als Handle zu definieren:

Code:

handles.vid = videoinput('winvideo', 1, 'RGB24_640x480');
 


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.
function varargout = 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.
 
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.