Acquisizione immagini da camere in matlab

di il
8 risposte

Acquisizione immagini da camere in matlab

Ciao a tutti!
devo creare un programma per acquisire le immagini da due webcam collegate, contemporaneamente, ogni 5 secondi. Voglio che questo sia comandato dalla pressione di un bottone. Come posso fare?
Io avevo creato uno script a parte che mi facesse questa acquisizione. Ma poi volevo creare la GUI con un pushbutton che una volta premuto mi possa plottare le immagini in due axis della gui. Non riesco però a farlo e ad unire le due cose. Qualcuno ha qualche suggerimento? Potrei fare tutto nello script altrimenti, e come nel caso?
Grazie in anticipo !!

8 Risposte

  • Re: Acquisizione immagini da camere in matlab

    Nota: lo script che ho creato mi permette però di fare solo la prima acquisizione, e non prevede la presenza del bottone. Io vorrei poter ripetere questa cosa per ottenere 20 immagini circa, o cmq che si ripeta tutte le volte che premo un bottone.
  • Re: Acquisizione immagini da camere in matlab

    Per creare una GUI puoi usare:
    [*] il tool GUIDE, attivabile con il comando "guide" dalla CommandWindow
    https://it.mathworks.com/help/matlab/creating_guis/about-the-simple-guide-gui-example.html
    [*] sel hai una versione recente di MatLab, il tool AppDesigner
    https://it.mathworks.com/products/matlab/app-designer.html
    [*] creare uno script / funzione in cui usi direttamente la funzione "uicontrol" () per aggiungere gli elementi della GUI

    In tutti e tre i casi le azioni che vengono attivate dagli elementi della GUI vengono gestite dalle "callback", le funzioni che sono associate agli elementi stessi.

    Nel tuo caso, dovresti creare almeno un "axes" ed un "pushbutton"; quindi potresti invocare lo script per l'acquisizione delle immagini nella callback del pushbutton; in alternativa potresti inserire il codice dello script direttamente nella callback.
    In questo modo, ad ogni pressione del pushbutton attiverai lo script.

    Per lanciare lo script più volte in sequenza senza dover sempre premere il pushbutton, puoi semplicemente inserire la chiamata allo script in un ciclo for nella callback del pushbutton.

    Per quanto riguarda il plottaggio, dipende dal formato delle immagini che hai acquisito, potresti, per esempio usare la funzione "imshow" ().

    Avendo un "axes" nella GUI l'immagine dovrebbe essere plottata automaticamente in esso, in caso contrario, puoi specificarne l'handle tramite la "property" "Parent".
  • Re: Acquisizione immagini da camere in matlab

    Grazie innanzitutto per la risposta!
    Mi rimane però il dubbio su come faccio a fare in modo che vengano plottati sui due "axes" le immagini acquisite tramite il mio codice già scritto (non mi è molto chiara la property "parent" e come va usata). Su quale elemento devo agire (handles? hObject? e in che modo?) Infatti inserendo il codice o comunque lo script creato a parte, non mi plotta le immagini acquisite dalle due camere negli axes ma in due figure a parte.
    Grazie in anticipo e grazie mille per la disponibilità!
  • Re: Acquisizione immagini da camere in matlab

    Quale funzione usi per plottare le immagini?

    Se usi la funzione "imshow" e se nella GUI i due axes hanno come handle, rispettivamente, "axes1" e "axes2", puoi specificare in quale axes plottare l'immagine definendo la property "parent" in questo modo:
    
    imshow(a1,map1,'parent',handles.axes1)
    imshow(a2,map2,'parent',handles.axes2)
    
    In questo caso, la prima immagine è definita dalle matrici "a1" e "map1" e viene plottata nell'"axes" con handle "axes1", analogamente per la seconda immagine.
  • Re: Acquisizione immagini da camere in matlab

    Ho usato imagesc. Ho provato a mettere solo il codice nella callback relativa al pushbutton ma mi da problemi.
    il codice a parte per l'acquisizione delle immagini dalle due camere è il seguente:
    t = timer('TimerFcn', 'stat=false','StartDelay',5);
    start(t); 
    
    stat=true;
    while(stat==true)
    cam1 = webcam(1); 
    cam2 = webcam(2); 
      a1 = snapshot(cam1); 
      a2 = snapshot(cam2); 
    figure; 
     imagesc(a1); 
    figure;
     imagesc(a2); 
     
        
      pause(1)
       
    end
    
     delete(t); 
    
    
    in pratica devo acquisire le immagini dalle due camere contemporaneamente ogni 5 sec.
    mettendo questo codice nella gui però mi dà errore. Non mi dà quindi le due immagini nei due axes della GUI. Come risolvo?
    Grazie ancora.
  • Re: Acquisizione immagini da camere in matlab

    Ho provato a mettere solo il codice nella callback relativa al pushbutton ma mi da problemi

    [...]

    mettendo questo codice nella gui però mi dà errore

    Se non pubblichi gli eventuali messaggi di errore non ti si può certo aiutare.

    Supponendo che l'acquisizione delle immagini funzioni correttamente:

    Come hai inserito il codice nella GUI?

    La porzione di codice che hai pubblicato è quella che hai inserito nella "callback"?

    [*] prima di tutto, ammesso che il codice che hai pubblicato sia quello che hai inserito nella GUI, devi eliminare le due chiamate alla funzione "figure" che creano delle nuove "windows" e, quindi, non negli "axes" della GUI
    [*] se nella GUI hai creato i due "axes", dovresti avere i rispettivi handles nei campi della struttura "handels" in input alla "callback"
    [*] per plottare le immagini negli "aexe" della GUI, basta indicare il loro handle come primo parametro nella chiamata alla funzione "imagesc" ()
    Supponendo, per esempio, che gli handles degli "axes" siano" "axes1" e "axes2":
    
    imagesc(handles.axes1,a1);
    imagesc(handels.axes2,a2);
    
  • Re: Acquisizione immagini da camere in matlab

    Ok ora è andato! Grazie mille!!
    Se invece, prima della pressione del tasto volessi già avere le immagini sui due axes su quale callback devo agire?
    Non trattandosi della pushbutton1_Callback, devo agire sulla openingFcn o OutputFcn?
  • Re: Acquisizione immagini da camere in matlab

    Devi aggiungere il codice nella Opening Function.
Devi accedere o registrarti per scrivere nel forum
8 risposte