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

OpenCV Discussion :

Détecter un objet


Sujet :

OpenCV

  1. #41
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Par défaut
    Le seul probleme c'est que cvLine trace un segment donc si tes points sont pas sur les bords ton image ne sera pas totalement separee et si on ecrit une boucle qui travaille au-dessus et en-dessous de la droite il faut absolument que celle-ci traverse toute l'image.
    Comme snoopy dis poste ton code ca serait sympa.

  2. #42
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 34
    Par défaut
    voilà l'image jespere que ça marche :

  3. #43
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 34

  4. #44
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    faut extrapoler l'équation de la droite tu te balade (de pixel en pixel). tu fais une boucle sur x, tu fais passer se x dans l'équation et tu compare le résultat à ton y si res>y tu es au dessus si res<y tu es en dessous et si c'est égal tu te trouve dessus.

    extrapolation:

    y=ax+b

    (x1,y1) et (x2,y2) ca te donne

    y1=a*x1+b
    y2=a*x2+b

    on soustrait

    (y1-y2)= a* (x1-x2)
    a= (y1-y2)/(x1-x2)

    et pour trouver b ca donne:

    y1= (y1-y2)/(x1-x2) * x1 +b
    b= y1- (x1* (y1-y2)/(x1-x2))

    et la tu as l'équation de la droite.

    résumé:
    tu fais une boucle pour balayer toute l'image tu compare y au res de l'équation (en te ballandant sur x)
    et puis tu compare la couleur du pixel si il est de la bonne couleur tu incremente nbpixel_sup si res>y sinon tu incrémente nbpixel_inf et pour le égal à toi de trancher tu le considère comme au dessus ou en dessous ou les deux.

  5. #45
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Par défaut
    La tu trace deux droites qui coupent un peu de l'image en bas et un peu de l'image en haut(toutes les deux obliques). Donc ton image est decoupee en quatres parties.C'est dans quelles sous-parties que tu veux compter les pixels Est-ce que tes droites peuvent etre en contacts avec les contours? Si non, ya un moyen assez simple de resoudre le probleme.
    J'arrive pas a voir ton image.

  6. #46
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 34
    Par défaut
    oui ça peut etre en contact avc le contour parce que mon contour est aleatoire, en fait jaurai 3 partie, et pour calculer le nombre de pixels je crois que ça va se faire de la meme manière

  7. #47
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 34
    Par défaut
    @snowpy, c'est ce que je veux faire mais a vrai dire je ne sais pas comment traduire cela en c++

  8. #48
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Par défaut
    Oui exact ca fait 3 parties mais c dans lesquelles que tu veux compter les pixels? Parceque snowpy t'as donne la solution, tu calcule l'equation de tes droites et tu te situe dans les parties grace a elles.

  9. #49
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 34
    Par défaut
    oui c vrai mais jai du mal a traduire ceci en C++

  10. #50
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Par défaut
    Ce sera du rapide parceque j'ai pas trop le temps la:
    Pour une droite:
    (x1,y1) et (x2,y2) ca te donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //les memes que tes parametres de cvLine
    CvPoint point1 =cvPoint(x1,y1);
    CvPoint point2 =cvPoint(x2,y2);
    a= (y1-y2)/(x1-x2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int a;
    a= (point1.y-point2.y)/(point1.x-point2.x)
    b= y1- (x1* (y1-y2)/(x1-x2))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int b;
    b= point1.y-(point1.x*(point1.y-point2.y)/(point1.x-point2.x))
    et la tu as l'équation de la droite.

    résumé:
    tu fais une boucle pour balayer toute l'image tu compare y au res de l'équation (en te ballandant sur x)
    et puis tu compare la couleur du pixel si il est de la bonne couleur tu incremente nbpixel_sup si res>y sinon tu incrémente nbpixel_inf et pour le égal à toi de trancher tu le considère comme au dessus ou en dessous ou les deux.
    On va prendre l'exemple de la droite du haut et de la partie d'au-dessus de cette droite
    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
     
    int nb_pixels_haut;
    for ( int i=0; i<image_mauche->height;i++)
    	{
    		for ( int j=0; j<image_mauche->width;j++)
    		{
                                          res = a * j + b;
                                           //si on est au dessus de la droite
    			if (i>res)
                                          {
                                                      //si pixel est blanc alors
                                                      if (cvGet2D,val[0] == 255)
                                                      {
                                                               nb_pixels_haut++;
                                                      }
                                          }
                                          //autres cas
                                          ................
    		}
    	}
    C'est du vite fait, il risque d'y avoir des erreurs mais ca doit te donner une idee.

  11. #51
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 34
    Par défaut
    Merci Glen , c'est très gentil de ta part

  12. #52
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    faut initialiser nb_pixel haut ou bas
    sinon c'est ca ^^
    pour deux droite le raisonnement est un peu plus compliqué.

  13. #53
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Par défaut
    Exact, sinon ca donnerait du grand nimporte quoi.
    Mais bon je voulais pas non plus lui macher tout le boulot, c'etait pour lui donner une idee de comment faire (la bonne excuse...^^)

  14. #54
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 34
    Par défaut
    normalement je dois calculer le nombre de pixel en dessus de la première droite, après en dessous de la 2eme droite et a la fin le nombre de pixels compris entre les 2 droites, alors dans un premier temps j'ai voulu traiter chaque partie séparement, alors j'ai voulu me concentrer sur le 1er cas

  15. #55
    Membre averti
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Par défaut
    bonsoir tout le monde

    je programme en C (du C pur)et moi aussi je débute avec opencv et j'aimerai un peu d'aide. J'ai une image binaire ( 4cercles blanc sur un fond noir ) et j'aimerai détecter ces cercles et extraire leurs rayons et leur centre. Ce que j'ai compris en lisant vos réponses c'est que je dois parcourir mon image et desque je trouve un pixel blanc je le transforme en rouge ou une autre couleur , je pense que je pourrai faire cela mais en ce qui concerne le centre et le rayon comment dois je faire ? y a t il quelqu'un qui a une idée?

    voici mon image en pièce jointe elle pourra vous aider
    merci pour toute aide
    cordialement
    Images attachées Images attachées  

Discussions similaires

  1. [QTP] Impossible de détecter les objets web
    Par Fabii dans le forum Test
    Réponses: 0
    Dernier message: 26/03/2012, 15h18
  2. Réponses: 4
    Dernier message: 04/05/2010, 13h15
  3. détecter qu'un objet est reçu complètement
    Par ratakses dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 04/05/2007, 19h39
  4. [Javascript] Détecter collision de deux objets <img>
    Par Invité4 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/04/2006, 08h54
  5. Réponses: 2
    Dernier message: 19/11/2005, 18h32

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