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 :

découper une image pour faire plusieurs "capteurs"


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Par défaut découper une image pour faire plusieurs "capteurs"
    Bonjour !
    Je voudrais découper une image et utiliser la fonction ButtonDownFcn pour que certain bout d'image lance une fonction quand on clique dessus.
    Je ne veux pas découper l'image en bloc de nxn pixels, mais découper l'espace qu'elle occupe dans l'objet axe par 10 en largeur et par 10 en longueur par exemple.

    Sans découper l'image, ça marche nickel avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(img,'ButtonDownFcn',@capteur);
    j'ai essayer de faire une double boucle que voici :

    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
    % ajout de l'image
    X3 = imread('photo.jpg','jpg');
    img=image('cdata',X3,'parent',photo);
    set(photo,'xlim',[0.5 size(X3,2)-0.5],'ylim',[0.5 size(X3,1)-0.5])
     
    % Découpage de l'image
    S = size(X3);
    nr = floor(S(1)/10);
    nc = floor(S(2)/10);
    decoup=cell(10,10);
        for r = 1:10
            for c = 1:10
                subX3(1:nr,1:nc)= X3((r-1)*nr+1:r*nr,(c-1)*nc+1:c*nc);
                set(decoup{r,c},'propriété',subX3); 
                set(decoup{r,c},'ButtonDownFcn',@capteur);
            end
        end
     
     
    function capteur(hObject, eventData)
    global r c
     
    if (r==1 && c==1)
        analyse
    end
    end
    Il ne se passe rien quand je clique sur l'image, je n'ai pas d'erreur dans la command window.
    J'ai essayé de mettre : disp hello dans la fonction capteur pour voir ce qu'il se passe mais apparemment je ne vais même pas dans cette fonction^^

    A force de tout bidouiller je finis par écrire n'importe quoi, alors s'il vous plait aidez moi

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

    Il ne peut y avoir qu'un seul évènement ButtonDownFcn par objet auquel tu associes ta fonction capteur comme tu l'as dit au début de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    img=image('cdata',X3,'parent',photo);
    set(img,'ButtonDownFcn',@capteur);
    Il te suffit ensuite de repérer l'endroit où tu as effectué le clic :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hAxes = get(hObject, 'Parent'); % objet Axes parent : photo
    get(hAxes, 'CurrentPoint')
    et d'effectuer le traitement adapté selon ces coordonnées.

    Remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subX3<s>(1:nr,1:nc)</s> = X3((r-1)*nr+1:r*nr,(c-1)*nc+1:c*nc); % inutile

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Par défaut
    fiou ! ..

    Bon je crois que j'y suis presque, mais j'ai encore un soucis, voici mon code :

    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
    % ajout de l'image
    X3 = imread('photo.jpg','jpg');
    img=image('cdata',X3,'parent',photo);
    set(photo,'xlim',[0.5 size(X3,2)-0.5],'ylim',[0.5 size(X3,1)-0.5])
    set(img,'ButtonDownFcn',@capteur);
     
     
     
    function capteur(hObject, eventData)
     
    global X3
     
    % Définition du point courrant
    hAxes = get(hObject, 'Parent');
    point=get(hAxes, 'CurrentPoint');
     
    % Découpage de l'image
    S = size(X3);
    nr = floor(S(1)/10);
    nc = floor(S(2)/10);
    decoup=cell(10,10);
    for r = 1:10
        for c = 1:10
            subX3 = X3((r-1)*nr+1:r*nr,(c-1)*nc+1:c*nc);
            set(decoup{r,c},'propriété',subX3);
        end
    end
     
    % Définition capteurs : à définir pour chaque TP
     
     %decoup{1,1};    capteur micro, lance track1
     %decoup{9,9};  %capteur accelero, lance track31
     
    % Test et lancement de l'analyse
    if  (ceil(point(1,1)/nr)==1 && ceil(point(1,2)/nc)==1)   
        analyse_micro
    else if (ceil(point(1,1)/nr)==9 && ceil(point(1,2)/nc)==9)  
            analyse_accelero
        end
    end
    end

    Quand je clique sur la zone decoup{1,1} c'est à dire en haut à gauche de l'image ça lance analyse_micro (wouhou !!), mais aucune des autres zones de lance de fonction .. (j'ai essayé avec plusieurs valeurs).
    Mon calcul à l'intérieur du ceil est peut-être faux je ne sais pas ..


    d'ailleurs la boucle for ne sert à rien là ..

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ta ligne set(decoup{r,c},'propriété',subX3); n'a aucune utilité. N'est-ce pas plutôt ça decoup{r,c} = subX3; que tu souhaites faire ?
    Citation Envoyé par vanilou Voir le message
    Quand je clique sur la zone decoup{1,1} c'est à dire en haut à gauche de l'image ça lance analyse_micro (wouhou !!), mais aucune des autres zones de lance de fonction
    Comme tu l'as si bien décris en commentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     %decoup{1,1};    capteur micro, lance track1
     %decoup{9,9};  %capteur accelero, lance track31
    N'est-ce pas ce que souhaitais ?

    Remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else if (ceil(point(1,1)/nr)==9 && ceil(point(1,2)/nc)==9)  
            analyse_accelero
        end
    end

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    elseif (ceil(point(1,1)/nr)==9 && ceil(point(1,2)/nc)==9)  
        analyse_accelero
    end
    Dernière modification par Invité ; 06/07/2012 à 12h03.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Par défaut
    Excuse moi je me suis mal exprimée, en effet la zone (1,1) fonctionne, mais pas la zone (9,9)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Tu es sûr de cliquer au bon endroit ? De mon côté la ligne analyse_accelero est bien exécutée.

Discussions similaires

  1. découper une image pour réaliser des liens avec css
    Par regh12 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 07/04/2010, 01h19
  2. Réponses: 6
    Dernier message: 30/07/2007, 12h10
  3. utiliser des morceaux d'une image pour faire des boutons
    Par Battosaiii dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 14/12/2005, 00h05

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