Pages: [1]   Go Down
Print
Author Topic: Aprire un'immagine in un'interfaccia  (Read 6207 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« on: 28-01-2010, 12:19:16 »

Ho tentato di aprire un'immagine, tramite il bottone "apri", creato con una gui come fatto a lezione dal prof.
Ho naturalmente modificato, il '*.m' in '*.jpg' e provato a caricare il file corrispondente in una matrice A, ma niente da fare.
Continua ad aprirmi un nuovo foglio, con il nome dell'immagine che ho caricato!
L'idea è quella di creare una matrice A, con il contenuto di pathname,filename, cioè il file che tento di aprire.
Correggetemi se sbaglio, magari con un codice più "verosimile"!

Dato che ci sono, se qualcuno ha qualche info in più sul salvataggio del file e la chiusura dell'interfaccia, se può gentilmente condividere!

Grazie anticipatamente!

ecco il mio codice:

Code:
function pushbutton1_Callback (hObject ecc...)
  [pathname, filename]=uigetfile ('*.jpg','Apri file');
  edit ([pathname,filename]);
  A=imread ([pathname, filename]);
  figure,imshow (A,[]);
Logged
atrides86
Matricola
*
Offline Offline

Posts: 75


« Reply #1 on: 28-01-2010, 13:26:12 »

l'errore è semplice.. hai sbagliato la sintassi di uigetfile scrivendo:

 [pathname, filename]=uigetfile ('*.jpg','Apri file');

invece è: (hai invertito i valori di ritorno tra pathname e filename)

[nomefile,path]=uigetfile('*.formato','titolo_fin')

Quindi quella giusta nel tuo caso è:

[filename,pathname]=uigetfile ('*.jpg','Apri file');

Ora pongo io una domanda sperando che qualcuno mi risponda... Una volta caricata questa immagine mettiamo che voglio creare un altro bottone filtro sobelx che fa partire una funzione lavorando con l'immagine appena caricata.. come gliela passo? Avevo pensato di dichiarare la variabile dell'immagine globale.. metto global A per esempio ma non so in che parte del codice dell'interfaccia inserirla perche mi da errore ovunque.

Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #2 on: 28-01-2010, 13:29:37 »

ho il tuo stesso problema..perchè per lavorare sull'immagine è necessario che le modifiche vengano salvate nella variabile mentre così ogni volta che si vuole utilizzare l'immagine bisogna caricarla nuovamente...ho provato a dichiararla come globale anche io in varie parti del codice, anche nella funzione che dovrebbe essere quella prinicpale, ma se poi la voglio utilizzare da qualche altra parte non la vede sempre lo stesso..
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #3 on: 28-01-2010, 14:07:42 »

l'errore è semplice.. hai sbagliato la sintassi di uigetfile scrivendo:

 [pathname, filename]=uigetfile ('*.jpg','Apri file');

invece è: (hai invertito i valori di ritorno tra pathname e filename)

[nomefile,path]=uigetfile('*.formato','titolo_fin')

Quindi quella giusta nel tuo caso è:

[filename,pathname]=uigetfile ('*.jpg','Apri file');

Ora pongo io una domanda sperando che qualcuno mi risponda... Una volta caricata questa immagine mettiamo che voglio creare un altro bottone filtro sobelx che fa partire una funzione lavorando con l'immagine appena caricata.. come gliela passo? Avevo pensato di dichiarare la variabile dell'immagine globale.. metto global A per esempio ma non so in che parte del codice dell'interfaccia inserirla perche mi da errore ovunque.



ora provo, non avendo matlab in questo pc, non sò se funziona.
Stando all'ultimo tuo quesito, supposta caricata un'immagine (in A per esempio), si potrebbe pensare di copiarla in una nuova matrice B, e su quest'ultima eseguire il filtro o l'operatore che si vuole applicare, cosi in modo da avere l'originale (A) distinta e intatta, e andare a salvare B con la modifica apportata.
Idea ancora non testata, quindi da prendere con le molle!!!
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #4 on: 28-01-2010, 14:13:55 »

il problema non è quello è che le variabili normali sono locali al metodo e quindi inutili e quelle globali (che dovrebbero essere viste in tutte le funzioni) forse sbagliamo ad utilizzarle..
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
leviadragon
Apprendista Forumista
**
Offline Offline

Posts: 217


WWW
« Reply #5 on: 28-01-2010, 14:47:46 »

Ieri ci ho lavorato anchio , e dopo 5 ore (si davvero 5 ore) a cercare guide e tutto ho scoperto che per salvare una variabile globale quale sia un'immagine bisogna creare un handles

la sintassi è questa ( da inserirefuori dai metodi dei pulsanti)
handles.A = imread('immagine');

quando la modificate  (con un qualunque metodo )dovete lanciare un comando che salva gli headles

guidata(hObject, handles);

insomma , nelle interfaccie la cosa è un pò complessa.
la funzione inoltre mi sembra abbastanza instabile perchè spesso mi crasha il programma boh
Logged

www.darkzero.altervista.org <-- se vi piace mettetela come homepage

Link Immagine


--gratuitamente ricevete,gratuitamente date--
atrides86
Matricola
*
Offline Offline

Posts: 75


« Reply #6 on: 28-01-2010, 15:09:07 »

sono riuscito a usare le variabili globali... le funzioni che indico sono quelle dei punsalti dell'interfaccia.

funzione pulsante carica immagine
...
[nomeFile,path]=uigetfile(...)
global A
A=imread([path nomeFile]);

...

funzione pulsante applica filtro
global A
B=filtro(A);
...


Nota: per riusarla si deve scrivere global... inoltre se a qualcuno interessa io ho creato una variabile globale chiamata stato che mi permette di capire se è gia stata caricata l'immagine ecc.. all'inizio vedo se è vuota con la funzione di matlab isempty(variabile) e poi modifiico gli stati a mio piacere assegnando un numero per ogni stato.. es carica stato 1.. applicazione filtro stato 2.. ecc ecc

Logged
andreacannella
Administrator
Forumista Esperto
*****
Offline Offline

Gender: Male
Posts: 1.488


Andea Cannella - www.andreacannella.com


WWW
« Reply #7 on: 28-01-2010, 16:44:26 »

a proposito di GUI in matlab, potrebbe essere utile scaricare alcuni esempi di GUI.

Ce n'è diversi a quest'indirizzo:
http://www.mathworks.it/matlabcentral/fileexchange/?term=tag%3A%22gui%22

Saluti
 ciao ciao

Andrea
Logged

Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall)

Good times for a change
See, the luck I've had
Can make a good man
Turn bad

So please, please, please
Let me, let me, let me
Let me get what I want
This time

The Smiths
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #8 on: 28-01-2010, 17:08:54 »

 ok ok ok
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #9 on: 01-02-2010, 17:19:10 »

sono riuscito a usare le variabili globali... le funzioni che indico sono quelle dei punsalti dell'interfaccia.

funzione pulsante carica immagine
...
[nomeFile,path]=uigetfile(...)
global A
A=imread([path nomeFile]);

...

funzione pulsante applica filtro
global A
B=filtro(A);
...


Nota: per riusarla si deve scrivere global... inoltre se a qualcuno interessa io ho creato una variabile globale chiamata stato che mi permette di capire se è gia stata caricata l'immagine ecc.. all'inizio vedo se è vuota con la funzione di matlab isempty(variabile) e poi modifiico gli stati a mio piacere assegnando un numero per ogni stato.. es carica stato 1.. applicazione filtro stato 2.. ecc ecc



Ho un problema con questa funzione praticamente quando applico il filtro , naturalmente creo il filtro da applicare come se fosse una funzione , ma mi da una serie di errori che non riesco a capire

ecco il codice della funzione e del metodo che applica il filtro

Code:
Funzione Outlier prima parte

function [Z]=Outlier(A)

I = double(rgb2gray(imread(A)));



qua i codici dei due pulsati , il caricamento immagine e l'applicazione del filtro
Code:
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

[filename,pathname] = uigetfile('*.jpg','Apri file');
global A
A = imread ([pathname, filename]);
figure,imshow(A,[]);




% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton8 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global A;

[Z] = Outlier(A);

figure,imshow(Z,[]),title('Outlier');






qua ci sono gli errori

Code:

??? Error using ==> strfind
Input strings must have one row.

Error in ==> imread at 201
if (strfind(filename, '://'))

Error in ==> Outlier at 6
I = double(rgb2gray(imread(A)));

Error in ==> Opzioni>pushbutton8_Callback at 188
[Z] = Outlier(A);

Error in ==> gui_mainfcn at 75
        feval(varargin{:});

Error in ==> Opzioni at 44
    gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback.


Logged
atrides86
Matricola
*
Offline Offline

Posts: 75


« Reply #10 on: 02-02-2010, 13:13:08 »

L'errore è semplice. Riguarda la funzione e non l'interfaccia. Tu hai scritto:

function [Z]=Outlier(A)

I = double(rgb2gray(imread(A)));

mentre quello giusto è:

function [Z]=Outlier(A)

Z = double(rgb2gray(A));

C'erano 2 errori:
1) Dichiari il valore di ritorno della funzione in Z ma poi metti la matrice in I quindi non la trova.
2) L'immagine è stata gia caricata dal bottone. Quindi devi semplicemente usarla senza doverla ricaricare.

A presto :-)

Logged
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #11 on: 02-02-2010, 19:52:01 »

Grazie sono riuscito a risolvere il problema^^
Logged
Pages: [1]   Go Up
Print
Jump to: