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étection du centre de gravité


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Détection du centre de gravité
    bonjour,
    je debute avec opencv
    je doit realise un programme qui detecte le centre de gravite d'un objet et puis il affiche une cercle au coordonne de ce point
    je deja tape quelque ligne de code mais je pas reussie a affiche le cercle
    help me please

    l'image sur la quelle je test mon code::

    http://static.mensup.fr/article/gran...e-lego-mp3.jpg



    le 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #include <iostream>
    #include <opencv/cv.h>
    #include <opencv/highgui.h>
    #include <opencv/cxcore.h>
    using namespace std;
    using namespace cv;
    int main()
    {
    int x,y;
    //int h=0,v=0,s=0;
    int sommeX = 0, sommeY = 0;
    int nbPixels=0;
    CvPoint objectPos = cvPoint(-1, -1);
     
     IplImage* img;
      IplImage* t;
        IplImage* imghsv;
        // lire est affiche l'image
        img=cvLoadImage("D:/lego.jpg",1);
        cvNamedWindow( "tst", CV_WINDOW_AUTOSIZE );
        imshow("tst",img);
        waitKey(0);
     
        //cree une image de mm taille que l'image d'origine et conversion en hsv
        imghsv=cvCreateImage(cvGetSize(img),8,3);
        cvCvtColor(img,imghsv,CV_BGR2HSV);
        imshow("tstr",imghsv);
        waitKey(0);
     
        //binarisation de l'image et detection du 1er objet
        IplImage * imgT = cvCreateImage ( cvGetSize ( img ) , 8 , 1 ) ;
        cvInRangeS ( imghsv, cvScalar (93, 45, 65) , cvScalar (140, 250, 250) , imgT ) ; // T  S  L
        imshow("ttr",imgT);
        waitKey(0);
     
        //creation d'un mask pour les operation morphologique
        IplConvKernel *kernel= cvCreateStructuringElementEx(7, 7, 4, 4, CV_SHAPE_ELLIPSE);
        cvErode(imgT , imgT , kernel, 1);
        cvErode(imgT , imgT , kernel, 1);
        cvDilate(imgT , imgT , kernel, 1);
        imshow("ttr",imgT);
        waitKey(0);
     
        //calculer du barycentre
        for(x = 0; x < imgT->width; x++) {
        for(y = 0; y < imgT->height; y++) {
            if(((uchar *)(imgT->imageData + y*imgT->widthStep))[x] == 255) {
                sommeX += x;
                sommeY += y;
                (nbPixels)++;
            }
        }
    }
    cvPoint((int)(sommeX / (nbPixels)), (int)(sommeY / (nbPixels)));
     
    if (nbPixels > 10)
            t=cvDrawCircle(img, objectPos, 15, CV_RGB(255, 0, 0), -1);
              imshow("y",t);
            waitKey(0);
       return 0;
    }
    erreur::

    C:\Users\xbox\Desktop\projetTest\main.cpp||In function 'int main()'
    C:\Users\xbox\Desktop\projetTest\main.cpp|57|error: void value not ignored as it ought to be|
    ||=== Build finished: 1 errors, 0 warnings ===|

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

    Le retour de la fonction cvDrawCircle() est de type void, tu ne peux donc pas assigner son retour dans IplImage* t.
    Le cercle est directement dessiné dans l'image d'origine (premier paramètre img ici). Si tu souhaites obtenir le résultat dans t, il te faut au préalable copier le contenu d'img dans t, puis utiliser t dans cvDrawCircle().

Discussions similaires

  1. Détection de tache de couleur et centre de gravité
    Par soybenito dans le forum OpenCV
    Réponses: 3
    Dernier message: 30/05/2009, 11h57
  2. Réponses: 1
    Dernier message: 29/04/2007, 23h12
  3. Centre de gravité d'un triangle
    Par anarchie_3000 dans le forum MATLAB
    Réponses: 2
    Dernier message: 08/02/2007, 19h11
  4. Déterminer le centre de gravité
    Par gids01 dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 09/10/2006, 10h40
  5. Rotation d'un rectangle autour du centre de gravité
    Par bucheron dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 22/06/2004, 12h01

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