Acquisizione immagini da camere in matlab

Discussioni su Matlab e Simulink

Moderatore: Toki

Regole del forum
Leggi: IProgrammatori.it - Regolamento Forum
Jordan
New Entry
Messaggi: 7
Iscritto il: 13 ago 2013, 11:25

Acquisizione immagini da camere in matlab

Messaggioda Jordan » 13 apr 2018, 15:50

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 !! :)
Jordan
New Entry
Messaggi: 7
Iscritto il: 13 ago 2013, 11:25

Re: Acquisizione immagini da camere in matlab

Messaggioda Jordan » 13 apr 2018, 15:54

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.
Avatar utente
ask_raf
Utente Senior
Messaggi: 537
Iscritto il: 12 feb 2015, 20:18

Re: Acquisizione immagini da camere in matlab

Messaggioda ask_raf » 15 apr 2018, 08:15

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" (https://it.mathworks.com/help/matlab/ref/uicontrol.html) 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" (https://it.mathworks.com/help/matlab/ref/imshow.html).

Avendo un "axes" nella GUI l'immagine dovrebbe essere plottata automaticamente in esso, in caso contrario, puoi specificarne l'handle tramite la "property" "Parent".
Hope this helps.
Qapla'
Jordan
New Entry
Messaggi: 7
Iscritto il: 13 ago 2013, 11:25

Re: Acquisizione immagini da camere in matlab

Messaggioda Jordan » 15 apr 2018, 15:34

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à!
Avatar utente
ask_raf
Utente Senior
Messaggi: 537
Iscritto il: 12 feb 2015, 20:18

Re: Acquisizione immagini da camere in matlab

Messaggioda ask_raf » 15 apr 2018, 17:53

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:

Codice: Seleziona tutto

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.
Hope this helps.
Qapla'
Jordan
New Entry
Messaggi: 7
Iscritto il: 13 ago 2013, 11:25

Re: Acquisizione immagini da camere in matlab

Messaggioda Jordan » 16 apr 2018, 09:16

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:

Codice: Seleziona tutto

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.
Avatar utente
ask_raf
Utente Senior
Messaggi: 537
Iscritto il: 12 feb 2015, 20:18

Re: Acquisizione immagini da camere in matlab

Messaggioda ask_raf » 17 apr 2018, 08:08

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" (http://it.mathworks.com/help/matlab/ref/imagesc.html)
Supponendo, per esempio, che gli handles degli "axes" siano" "axes1" e "axes2":

Codice: Seleziona tutto

imagesc(handles.axes1,a1);
imagesc(handels.axes2,a2);
Hope this helps.
Qapla'
Jordan
New Entry
Messaggi: 7
Iscritto il: 13 ago 2013, 11:25

Re: Acquisizione immagini da camere in matlab

Messaggioda Jordan » 17 apr 2018, 09:03

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?
Avatar utente
ask_raf
Utente Senior
Messaggi: 537
Iscritto il: 12 feb 2015, 20:18

Re: Acquisizione immagini da camere in matlab

Messaggioda ask_raf » 17 apr 2018, 13:05

Devi aggiungere il codice nella Opening Function.
Hope this helps.
Qapla'

Torna a “Matlab e Simulink”

Chi c’è in linea

Visitano il forum: Nessuno e 31 ospiti