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 :

Boite englobante (suivi)


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut Boite englobante (suivi)
    Bonjour,
    en faite je travaille sur une vidéo infrarouge et je dois faire du traking.
    La sur cette image j'ai appliqué Sobel+seuillage.
    Ce que je cherche à faire c'est la boite englobante en violet.
    le problème c'est que j'arrive à récupérer le pixel blanc(0 en binaire)
    voila le code:

    CvPoint* getImageBounds(IplImage* im)
    {

    cout << "start-----------------------" << endl;

    CvPoint points[4];

    int h = im->height;
    int w = im->width;

    bool continu = true;
    for(int j=0;j<h && continu;j++)
    {
    for(int i=0;i<w;i++)
    {
    if(cvGet2D(im, i, j).val[0]==1)

    {
    cerr << "point1 = " << points[0].x <<" point1 = "<< points[0].y <<endl;
    points[0] = cvPoint(i,j);
    continu = false;
    break;
    }
    }
    }

    cout << "start" << endl;
    continu = true;
    for(int i=0;i<w && continu;i++)
    {
    for(int j=h-1;j>=0;j--)
    {
    if(cvGet2D(im, j, i).val[0]==1)

    {
    points[1] = cvPoint(i,j);
    // x2=i;
    // y2=j;
    cerr << "point2 = " << points[1].x <<" point2 = "<< points[1].y <<endl;
    continu = false;

    break;
    }
    }
    }
    cout << "start" << endl;
    continu = true;
    ///
    for(int i=w-1;i>=0 && continu;i--)
    {
    for(int j=0;j<h;j++)
    {
    cout << "start" << endl;
    if(cvGet2D(im, j, i).val[0]==1)
    {
    points[2] = cvPoint(i,j);
    // x3=i;
    // y3=j;


    cerr << "point3 = " << points[2].x <<" point3 = "<< points[2].y <<endl;
    continu = false;
    break;
    }
    }
    }

    continu = true;
    ///
    for(int j=h-1;j>=0 && continu;j--)
    {
    for(int i=w-1;i>=0;i--)
    {

    if(cvGet2D(im, j, i).val[0]==1)
    {
    points[3] = cvPoint(i,j);

    // x4=i;
    // y4=j;
    cerr << "point4 = " << points[3].x <<" point4 = "<< points[3].y <<endl;
    continu = false;
    break;
    }
    }

    }

    CvPoint res[4];

    res[0]= cvPoint(points[1].x,points[0].y);//System.out.println(" :-: "+res[0]);
    cerr << "res = " << res[0].x <<" res = "<< res[0].y <<endl;
    res[1]= cvPoint(points[2].x+4,points[0].y);//System.out.println(" :-: "+res[1]);
    res[2]= cvPoint(points[1].x,points[3].y+4);//System.out.println(" :-: "+res[2]);
    cerr << "res = " << res[2].x <<" res = "<< res[2].y <<endl;
    res[3]= cvPoint(points[2].x+4,points[3].y+4);
    cvRectangle(im,res[0] ,res[3],CV_RGB(255,255,0), 3, 8, 0);
    return res;

    }

    Aidez moi svp je bloque

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut
    c bon j'ai trouvé la solution il faut mettre
    if(cvGet2D(im, j, i).val[0]==255) et inverser les i et j

    la fonction getImageBounds(SobelImag) me rend 4 points Maiiiiiiiiiiiiiiiiiis
    j'ai pas pu dessiner la boite englobante avec j'ai fais:
    cvRectangle(SobelImag,res[0] ,res[3] ,CV_RGB(255,255,0), 3, 8, 0);
    mais ca ne marche pas.<<il m'affiche res not declared in this scope>>
    Aide!!!!!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut Résolu
    ouiiiiii, j'ai trouvé la solution

    CvPoint* pts;
    pts=getImageBounds(SobelImag);
    cvRectangle(SobelImag,pts[0], pts[3],CV_RGB(255,255,255), 3, 8, 0);

Discussions similaires

  1. boite englobante d'une image
    Par lucciana dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 05/02/2011, 00h36
  2. Evitement des collisions en utilisant les boites englobantes
    Par eemii dans le forum Intelligence artificielle
    Réponses: 2
    Dernier message: 18/03/2010, 10h29
  3. irrlicht probleme boite englobante
    Par ryu sensei dans le forum Irrlicht
    Réponses: 0
    Dernier message: 11/03/2010, 17h05
  4. optimisation de calcul de boite englobante
    Par Rastacouéne dans le forum Mathématiques
    Réponses: 7
    Dernier message: 25/04/2007, 14h32
  5. Boite de suivi de téléchargement
    Par GRAF dans le forum Bases de données
    Réponses: 9
    Dernier message: 18/03/2005, 13h20

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