IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

Enregistrer valeur avec champ texte et pushbutton, dans une boucle [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 2
    Points
    2
    Par défaut Enregistrer valeur avec champ texte et pushbutton, dans une boucle
    Bonjour a tous,

    Je cherche à créer une GUI sous MATLAB me permettant d'enregistrer une image issue d'un traitement que voici :

    A partir d'une image de plaque d'immatriculation, j'affiche dans un autre champ Axes une image qui correspond au caractère de la plaque segmentée. J'ai donc une boucle qui me permet d'afficher image par image les caractères de ma plaque.

    Mon but est de pouvoir attribuer une valeur (A..Z et 1..9) suivant le caractère affiche en écrivant donc cette valeur dans un champ texte et pressant un bouton OK.

    Comme c'est la première fois que je manie l'interface graphique, j'ai beau eu lire des topics j'ai un peu de mal à adapter ce que j’apprends à mon code.

    J’espère avoir été assez clair dans mes explications, je vous fourni le code ainsi qu'un imprim. écran qui pourra peut-être mieux vous éclairer sur comment doit fonctionner mon programme !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    function varargout = GUI_CharGen(varargin)
    % GUI_CHARGEN M-file for GUI_CharGen.fig
    %      GUI_CHARGEN, by itself, creates a new GUI_CHARGEN or raises the existing
    %      singleton*.
    %
    %      H = GUI_CHARGEN returns the handle to a new GUI_CHARGEN or the handle to
    %      the existing singleton*.
    %
    %      GUI_CHARGEN('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in GUI_CHARGEN.M with the given input arguments.
    %
    %      GUI_CHARGEN('Property','Value',...) creates a new GUI_CHARGEN or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before GUI_CharGen_OpeningFunction gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to GUI_CharGen_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
     
    % Copyright 2002-2003 The MathWorks, Inc.
     
    % Edit the above text to modify the response to help GUI_CharGen
     
    % Last Modified by GUIDE v2.5 13-Jul-2012 11:24:21
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @GUI_CharGen_OpeningFcn, ...
                       'gui_OutputFcn',  @GUI_CharGen_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
     
     
    % --- Executes just before GUI_CharGen is made visible.
    function GUI_CharGen_OpeningFcn(hObject, eventdata, handles, varargin)
    clc
     
    % 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 GUI_CharGen (see VARARGIN)
    % 
     
     
     
    % Read in image
    img = imread('C:\Documents and Settings\Intern\Desktop\piste_internship2\AET77\AET77_20110721_182621_235869_plt.jpg');
    img = imresize(img , 0.75, 'nearest');
    % Switch active axes to the one you made for the image.
    axes(handles.axesImage);
    % Put the image array into the axes so it will appear on the GUI
    imshow(img);
     
    %DETECTION DES CHARACTERES 
     
      seuil_tt = 0.300;
      total = 0;
      BW = im2bw(img, seuil_tt) ;
      BW2 = bwareaopen(BW, 400);
      BW3 = ~BW2;
      BW4 = bwareaopen(BW3, 100);
      [region, number] = bwlabel(BW4);
      char_extract = regionprops(region,'BoundingBox');
      for p=1:number
            total = total + bwarea(region==p);
      end
      area  = total/p;
     
      for p=1:number
            if bwarea(region==p) > (area - (25*area/100)) &&  bwarea(region==p) < (area + (25*area/100))
                  [r,c] = find (region==p);
                  caract =region(min(r)-10:max(r)+10,min(c)-10:max(c)+10);
                  caract2 =img(min(r)-10:max(r)+10,min(c)-10:max(c)+10);
                  axes(handles.char_view);
                  imshow(caract2);
     
                  waitforbuttonpress
                  %TAPER LA LETTRE QUI CORRESPOND AU CHARACTERE DE LA PLAQUE
                  % -> valeur = get(handles.Tag, 'Propriété');
                  % -> set(handles.Tag, 'Propriété',nouvelle_valeur);
     
                  %IF BOUTON NEXT ALORS EXIT RDV A TERMINER LE PARCOURS DE BOUCLE ET
                  %REITERER
                  %ELSE IF BOUTON OK
                        %MENU CASE   
                                %ENREGISTRER IMG DANS DOSSIER 
     
            end
             %TERMINER LE PARCOURS DE BOUCLE ET REITERER
      end
     
     
    % ENREGISTREMENT   
    % % nom=sprintf('char_%d_%d.jpg', n,p);
    % % imwrite (varVal,fullfile(enr_dos,nom),'jpg');
    % 
     
     
    % end
     
    % Choose default command line output for GUI_CharGen
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes GUI_CharGen wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
     
    % --- Outputs from this function are returned to the command line.
    function varargout = GUI_CharGen_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 OKbutton.
    function OKbutton_Callback(hObject, eventdata, handles)
    % hObject    handle to OKbutton (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
     
    % --- Executes on button press in nextpic.
    function nextpic_Callback(hObject, eventdata, handles)
    % hObject    handle to nextpic (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
     
     
    function edit1_Callback(hObject, eventdata, handles)
    % hObject    handle to edit1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: get(hObject,'String') returns contents of edit1 as text
    %        str2double(get(hObject,'String')) returns contents of edit1 as a double
     
     
    % --- Executes during object creation, after setting all properties.
    function edit1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to edit1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc
        set(hObject,'BackgroundColor','white');
    else
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    end
    Merci par avance.
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Quel est la question ici ? Quel est le point précis qui te bloque ?
    Voyant que tu as mis ton code dans l'OpeningFcn, j'attire ton attention sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    % --- Executes just before GUI_CharGen is made visible.
    function GUI_CharGen_OpeningFcn(hObject, eventdata, handles, varargin)

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci pour cette reponse, je me doutais quelque part que le code deja fait n'etait pas a la bonne place, mais je ne sais pas franchement ou le placer..

    Le point qui me bloque est que j'aimerais connaitre la ligne de code qui me permettrait de detecter la pression du bouton OK, et lire ce qu'il y a d'ecrit dans le champ texte prevu a cet effet (la ou il y a la lettre G sur le screen) afin de pouvoir la stocker et faire un switch case suivant sa valeur !

    La pression du bouton OK, ou nextpic (mais en ayant la ligne de code pour le bouton ok je pense pouvoir me depatouiller pour celle du nextpic) permettrait de faire avancer le parcours de la boucle en changeant de caractere de la plaque, afin de continuer a les identifier>

    J'espere avoir ete plus precis !

    Merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Cette ligne de code, tu l'as déjà
    Dès que l'utilisateur appui sur un bouton ou valide un Edit Text, leur fonction *_Callback sont immédiatement exécutées, il n'y a qu'à mettre ton code dedans.

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    D'accord, mais comment avoir la valeur du champ texte au moment ou l'on clique sur le bouton OK, et du coup continuer le parcours de la boucle (et donc des caracteres) ou continuer le parcours sans traitement par un clique sur le bouton Nextpic ?

    Cordialement

  6. #6
    Invité
    Invité(e)
    Par défaut
    En appliquant ce que tu as en commentaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    % -> valeur = get(handles.Tag, 'Propriété');
    % -> set(handles.Tag, 'Propriété',nouvelle_valeur);
    Le tag de ton Edit Text c'est edit1, et le texte c'est la propriété 'String'.

    Pour ce qui est de la "poursuite", mets simplement le changement dans le Callback du bouton Nextpic.
    Dernière modification par Invité ; 17/07/2012 à 18h09.

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Tres bien, merci pour tes reponses !
    Je vais essayer de trouver ca, je tiendrais la discussion a jour si j'ai d'autres questions

    Cordialement

  8. #8
    Candidat au Club
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Rebonjour,

    J'essaie de garder mon calme mais.. je n'y comprend rien !

    Premierement j'essaie de regler la premiere remarque que vous m'avez faite : l'emplacement du code qui etait dans % --- Executes just before GUI_CharGen is made visible.

    Je ne sais pas du tout ou le mettre a part cette endroit puisqu'a l'execution de l'interface, c'est le seul endroit ou ca marche. Faut-il le mettre dans une autre fonction et l'appeler ? Comment faire ?

    Ensuite je comprend a quoi sert cette ligne 'valeur = get(handles.Tag, 'Propriété');' mais je ne sais pas ou la mettre dans mon code, et comment continuer le parcours de ma boucle apres avoir appuye sur un des deux boutons.. faut-il mettre un if ?

    Bref, toutes mes excuses mais je suis paume

  9. #9
    Invité
    Invité(e)
    Par défaut
    Avant tout, il faut que tu comprennes le principe d'une interface graphique.
    Contrairement à une simple fonction, ce n'est pas une suite d'instructions qui s'exécutent les unes à la suite des autres.
    1. Tu as dans un premier temps la mise en place de l'interface : placement des composants graphiques, association des fonctions callback,... chose facilement faite à l'aide de GUIDE. Sans il te faudra quelques lignes de code. Tu peux apercevoir la différence ici.
      Pour comprendre les différents rôles des callback et propriétés, je te conseille de regarder la documentation "uicontrol properties".
    2. Puis le codage du contenu des fonctions callback que tu as associé. Celles-ci seront comme je t'ai dit exécutées lorsque l'utilisateur interagira avec les composants (clic sur les boutons, saisie des zones de texte,...)


    Je te conseille d'étudier minutieusement le code présenté ici.
    Les 57 premières lignes sont l'équivalent de ce que tu as fait sur GUIDE en plaçant les éléments. Les fonctions retrancher et ajouter sont les fonctions callback des boutons -/+.
    Tu pourra noter qu'il n'y a aucun code d'attente entre chaque clic.

  10. #10
    Candidat au Club
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Tres bien, merci beaucoup pour les liens, et surtout d'etre reste patient

    A bientot,

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/03/2014, 10h31
  2. Réponses: 3
    Dernier message: 20/09/2006, 17h07
  3. Réponses: 5
    Dernier message: 15/09/2006, 17h13
  4. utilisation de la valeur du champs texte dans la meme page
    Par dracula2000 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/04/2006, 11h48
  5. Réponses: 6
    Dernier message: 17/03/2006, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo