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

zwei Kameras verschiedenen Axes zuordnen

 

dasjoki
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2017, 16:05     Titel: zwei Kameras verschiedenen Axes zuordnen
  Antworten mit Zitat      
Hallo zusammen,

ich habe mich nun erstmalig an die GUI-Programmierung gewagt und stoße doch schnell auf Probleme. Da ich die Syntax noch nicht ganz verstanden habe, fällt es mir schwer zwei Kameras die entsprechende Axes zuzuordnen.

Hier der Code (habe ich für eine Kamera im Internet gefunden):

Code:


% --- Executes just before InterDetectGUI is made visible.
function InterDetectGUI_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 InterDetectGUI (see VARARGIN)

% Choose default command line output for InterDetectGUI
handles.output = hObject;


handles.video1 = videoinput('winvideo', 1);
set(handles.video1, 'TimerPeriod', 0.05, ...
      'TimerFcn',['if(~isempty(gco)),'...
                      'handles=guidata(gcf);'...                                 % Update handles
                      'image(getsnapshot(handles.video1));'...                    % Get picture using GETSNAPSHOT and put it into axes using IMAGE
                      'set(handles.Camera1,''ytick'',[],''xtick'',[]),'...    % Remove tickmarks and labels that are inserted when using IMAGE
                  'else '...
                      'delete(imaqfind);'...                                     % Clean up - delete any image acquisition objects
                  'end']);
triggerconfig(handles.video1,'manual');
handles.video1.FramesPerTrigger = Inf; % Capture frames until we manually stop it


handles.video2 = videoinput('winvideo', 2);
set(handles.video2,'TimerPeriod', 0.05, ...
      'TimerFcn',['if(~isempty(gco)),'...
                      'handles=guidata(gcf);'...                                 % Update handles
                      'image(getsnapshot(handles.video2));'...                    % Get picture using GETSNAPSHOT and put it into axes using IMAGE
                      'set(handles.Camera2,''ytick'',[],''xtick'',[]),'...    % Remove tickmarks and labels that are inserted when using IMAGE
                  'else '...
                      'delete(imaqfind);'...                                     % Clean up - delete any image acquisition objects
                  'end']);
triggerconfig(handles.video2,'manual');
handles.video2.FramesPerTrigger = Inf; % Capture frames until we manually stop it

% Update handles structure
guidata(hObject, handles);

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


und weiter unten:

Code:
% --- Executes on button press in startStopCamera.
function startStopCamera_Callback(hObject, eventdata, handles)
% hObject    handle to startStopCamera (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% Start/Stop Camera
if strcmp(get(handles.startStopCamera,'String'),'Start Camera')
      % Camera is off. Change button string and start camera.
      set(handles.startStopCamera,'String','Stop Camera')
      start(handles.video1)
      start(handles.video2)
else
      % Camera is on. Stop camera and change button string.
      set(handles.startStopCamera,'String','Start Camera')
      stop(handles.video1)
      stop(handles.video2)
end


Zur Erklärung: Ich habe zwei Axes (Tags: Camera1 und Camera2) angelegt. Am Rechner habe ich zwei USB-Kameras angeschlossen.
Auf der GUI habe ich einen Button (Tag: startStopCamera).

Alles, was mit 'video2' und 'Camera2' zutun hat, habe ich der Vorlage selber hinzugefügt.

Wenn ich den Code dann laufen lasse und den Button startStopCamera drücke, wird mir im Axes mit dem tag Camera2 das Bild beider Kameras im Wechsel angezeigt und die Axes mit dem tag Camera1 bleibt leer.

Da ich nun wirklich noch viele Probleme mit der Syntax habe, weiß ich nicht wo ich suchen muss. Sieht jemand den Fehler?

Beste Grüße und vorab vielen Dank
Jojo
Private Nachricht senden Benutzer-Profile anzeigen


dasjoki
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2017, 14:46     Titel:
  Antworten mit Zitat      
niemand? Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.03.2017, 14:58     Titel:
  Antworten mit Zitat      
Hallo,

als schnelle Abhilfe versuch mal folgendes einzufügen / zu ersetzen:
Code:
'image(getsnapshot(handles.video1), ''Parent'', handles.Camera1);'

(jeweils zwei einfache Hochkomma)

Etwas langfristiger gedacht: der Code ist sehr gruselig. Statt eines Endlosstrings sollte man Function Handles als Timer-Funktion verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
dasjoki
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2017, 15:15     Titel:
  Antworten mit Zitat      
Hallo Harald,

das funktioniert tatsächlich. Vielen Dank.

Kennst du eine bessere Möglichkeit zwei Kamerabilder anzuzeigen? Wie würde deine Lösung aussehen?

Beste Grüße
Jojo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.03.2017, 18:41     Titel:
  Antworten mit Zitat      
Hallo,

mangels Kameras kann ich das nicht testen. Versuchen kannst du es so:

Code:
set(handles.video1, 'TimerPeriod', 0.05, ...
      'TimerFcn', @(varargin) fun(1))

entsprechend für video2, und
Code:
function fun(nummer)
if(~isempty(gco))
                      handles=guidata(gcf);                                 % Update handles
                      image(getsnapshot(handles.(['video' num2str(nummer)])));                   % Get picture using GETSNAPSHOT and put it into axes using IMAGE
                      set(handles.(['Camera' num2str(nummer)]),'ytick',[],'xtick',[])    % Remove tickmarks and labels that are inserted when using IMAGE
                  else
                      delete(imaqfind);                                     % Clean up - delete any image acquisition objects
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
dasjoki
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2017, 13:33     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe es inzwischen so gelöst:

Code:
% --- Executes on button press in startStopCamera.
function startStopCamera_Callback(hObject, eventdata, handles)
% hObject    handle to startStopCamera (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% Start/Stop Camera

set(handles.startStopCamera,'Enable','off');


try
    video1 = videoinput('winvideo', 1);
% src = getselectedsource(video1);
% src.BrightnessMode = 'manual';
% src.Brightness = 10;
    hImage1 = image('Parent',handles.Camera1);
    cams = 1;
end;
try
    video2 = videoinput('winvideo', 2);
    hImage2 = image('Parent',handles.Camera2);
    cams = 2;
end;

if cams == 1
    preview(video1, hImage1);
elseif cams == 2
    preview(video1, hImage1);
    preview(video2, hImage2);
end;


Nun möchte ich noch Einstellungen wie Helligkeit etc. einstellen. In einem normalen Matlabscript funktionier das so:

Code:
video1=videoinput('winvideo',i);
src = getselectedsource(video1);
src.BrightnessMode = 'manual';
src.Brightness = 10;
preview(video1);


Wenn ich gleiches versuche in meinen Code für die GUI einzubauen (oben als Kommentar) passiert gar nichts. Das Bild ist da aber die Helligkeit ändert sich nicht.
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 - 2024 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.