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 :

Problème


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Software engineer
    Inscrit en
    Août 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Software engineer

    Informations forums :
    Inscription : Août 2008
    Messages : 139
    Par défaut Problème

    je suis un eleve ingenieur en informatique ,je travaille avec dev-cpp et je voudrais utiliser opencv pour implémenter l'algorithme de k-means . j'ai commencé a ecrire le code et j'ai rencontrer un problem si je compile un seul fichier tout va bien , mais dés que je cree un projet des erreurs d'edition de lien apparaissent !

  2. #2
    Membre éprouvé Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Par défaut
    Bonjour,

    Je ne connais pas bien dev cpp mais l'as-tu correctement 'mis à jour" depuis que tu as installé opencv (chemin des includes et des librairies) ? Regarde le lien ci-dessous pour installer correctement opencv et dev cpp.
    http://opencvlibrary.sourceforge.net/DevCpp

    A+,

    Hunta

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut
    verifies que t'as inclu les headers

    #include "***.h" etc ...

    sinon ton probléme viens du linker du projet avec les librairies opencv

    bon courage

  4. #4
    Membre confirmé
    Homme Profil pro
    Software engineer
    Inscrit en
    Août 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Software engineer

    Informations forums :
    Inscription : Août 2008
    Messages : 139
    Par défaut c'est un probleme d'edition des liens entre les fichiers du projet
    je suis nouveau dans ce forum , merci beaucoup pour vos reponse , mais le problem est le suivant :
    j'ai bien installer opencv et ça tourne bien sans creation de projet !
    quand le code commence a s'encombrer j'ai décidé de l'organiser et de le découper en 3 fichiers , là je suis bloqué
    voici le code :

    //fichier main.cpp

    #include "main.h"

    using namespace std;

    int main()
    {

    /*initialisation des images*/
    img=cvLoadImage("C:\A.bmp");
    img_nvg=cvCreateImage(cvGetSize(img), img->depth, 1);
    img_inv=cvCloneImage(img_nvg);


    //Création des fenêtres dans lesquelles nous afficherons les images
    cvNamedWindow("img",CV_WINDOW_AUTOSIZE);
    cvNamedWindow("nvg",CV_WINDOW_AUTOSIZE);
    cvNamedWindow("inv",CV_WINDOW_AUTOSIZE);


    //On vérifie l'origine de l'image chargée
    //Si elle n'est pas en haut à gauche, il faut la corriger
    int flip=0;
    if(img->origin!=IPL_ORIGIN_TL)
    {
    flip=CV_CVTIMG_FLIP;
    }

    //Conversion en niveaux de gris
    cvConvertImage(img, img_nvg, flip);


    /*initialisation des centres de classes*/
    scalaire=cvGet2D(img_nvg,0,0);
    class1=scalaire.val[0];
    scalaire=cvGet2D(img_nvg,100,200);
    class2=scalaire.val[0];

    cout<<class2 ;
    res=(img_nvg->width)*(img_nvg->height);
    matrice=allouer_matrice(2,res);
    cout << res << endl ;
    cout << img_nvg->width << "x" << img_nvg->height << endl;



    matrice_diff(matrice,img_nvg->width,img_nvg->height,class1,class2);

    new_centroid(matrice,img_nvg->width,img_nvg->height,class1,class2);

    creat_new_image(matrice,img_nvg->width,img_nvg->height,class1,class2);

    cout << class1 << endl << class2 << endl << endl;


    //Affichage des images

    cvShowImage("inv", img_inv);
    cvShowImage("img", img);
    cvShowImage("nvg", img_nvg);

    //On attend que l'utilisateur aie appuyé sur une touche pour continuer
    cvWaitKey(0);

    //déallocation de la mémoire allouée pour la matrice
    deallouer_matrice(matrice);

    //Destruction des fenêtres et désallocation des images.
    cvDestroyWindow("img");
    cvDestroyWindow("nvg");
    cvDestroyWindow("inv");

    cvReleaseImage(&img);
    cvReleaseImage(&img_nvg);
    cvReleaseImage(&img_inv);

    return 0;
    }



    //fichier kmeans.cpp

    #include "main.h"

    using namespace std;

    /*allocation dynamique de la matrice*/
    double** allouer_matrice(int l,int c)
    {
    double** pp;
    int i;

    if(!(pp=new double* [l]))
    {
    cout<< "echec de l'allocation mémoire";
    exit(1);
    }

    for(i=0;i<l;i++)
    if (!(*(pp+i)=new double [c]))
    {
    cout << "echec de l'allocation mémoire" ;
    exit(2);
    }


    return pp;
    }


    /*déallocation de la mémoire allouée par la matrice*/
    void deallouer_matrice(double** pp)
    {
    int i;
    for(i=0;i<2;i++)
    delete [] *(pp+i);

    delete [] pp;
    }


    /*matrice de difference*/
    void matrice_diff(double** tab,int l,int c,double& c1,double& c2)
    {
    long k=0;

    for(int x=0; x<l; x++)
    {
    for(int y=0; y<c; y++)
    {

    //On récupère le pixel (x,y) de l'image en niveaux de gris.
    scalaire=cvGet2D(img_nvg, y, x);

    //matrice des differences
    tab[0][k]=fabs(c1-scalaire.val[0]);
    tab[1][k]=fabs(c2-scalaire.val[0]);

    if (tab[0][k]<tab[1][k])
    {
    tab[0][k]=1;
    tab[1][k]=0;
    }
    else
    {
    tab[0][k]=0;
    tab[1][k]=1;
    }

    k++;
    }
    }
    }


    /*nouveaux centres de classes*/
    void new_centroid(double** tab,int l,int c,double& c1,double& c2)
    {
    long nb1=0;
    long nb2=0;
    long k=0;
    double som1=0;
    double som2=0;

    for(int x=0; x<l; x++)
    {
    for(int y=0; y<c; y++)
    {
    //On récupère le pixel (x,y) de l'image en niveaux de gris.
    scalaire=cvGet2D(img_nvg, y, x);
    if (tab[0][k]==1)
    {
    som1=som1+scalaire.val[0];
    nb1++;
    }
    else
    {
    som2=som2+scalaire.val[0];
    nb2++;
    }
    k++;
    }
    }

    c1=som1/nb1;
    c2=som2/nb2;
    }


    /*creation du nouveau image*/
    void creat_new_image(double** tab,int l,int c,double& c1,double& c2)
    {
    int k=0;

    for(int x=0; x<l; x++)
    {
    for(int y=0; y<c; y++)
    {
    scalaire=cvGet2D(img_nvg, y, x);
    if (tab[0][k]==1)
    scalaire.val[0]=c1;
    else
    scalaire.val[0]=c2;
    cvSet2D(img_inv, y, x, scalaire);
    k++;
    }
    }
    }


    //fichier main.h

    #include <cv.h>
    #include <highgui.h>
    #include <math.h>
    #include <iostream>
    #include <stdlib.h>


    /*Déclaration des images*/
    IplImage *img=0;
    IplImage *img_nvg=0;
    IplImage *img_inv=0;

    /*declaration des variables globeaux*/
    double class1=0;
    double class2=0;
    long res=0;
    double** matrice;
    CvScalar scalaire;


    /*prototypes des fonctions*/
    double** allouer_matrice(int l,int c);
    void deallouer_matrice(double** pp);
    void matrice_diff(double** tab,int l,int c,double& c1,double& c2);
    void new_centroid(double** tab,int l,int c,double& c1,double& c2);
    void creat_new_image(double** tab,int l,int c,double& c1,double& c2);

  5. #5
    Membre éprouvé Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Par défaut
    Bonjour,

    J'aurai rejoint l'avis de faroukus pour les librairies cv.lib, highgui.lib et cxcore.lib dans le linker mais vu que tu peux compiler un fichier seul, ça veut dire que tu y as déjà pensé . Peux-tu nous donner le listing des erreurs de compilation ?
    Perso, j'aurai mis un .h par fichier .cpp (avec les infos pour le pré-processeur au cas où), je trouve ça plus clair mais bon, chacun fait comme il veut .

    A+,

    Hunta

  6. #6
    Membre confirmé
    Homme Profil pro
    Software engineer
    Inscrit en
    Août 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Software engineer

    Informations forums :
    Inscription : Août 2008
    Messages : 139
    Par défaut
    en fait ta raison
    voila les erreurs :

    Linking console executable: bin\Release\kmeans.exe

    obj\Release\kmeans.o(.bss+0x0):kmeans.cpp: multiple definition of `scalaire'

    obj\Release\main.o(.bss+0x0):main.cpp: first defined here

    obj\Release\kmeans.o(.bss+0x20):kmeans.cpp: multiple definition of `matrice'

    obj\Release\main.o(.bss+0x20):main.cpp: first defined here

    obj\Release\kmeans.o(.bss+0x24):kmeans.cpp: multiple definition of `res'

    obj\Release\main.o(.bss+0x24):main.cpp: first defined here

    obj\Release\kmeans.o(.bss+0x28):kmeans.cpp: multiple definition of `class2'

    obj\Release\main.o(.bss+0x28):main.cpp: first defined here

    obj\Release\kmeans.o(.bss+0x30):kmeans.cpp: multiple definition of `class1'

    obj\Release\main.o(.bss+0x30):main.cpp: first defined here

    obj\Release\kmeans.o(.bss+0x38):kmeans.cpp: multiple definition of `img_inv'

    obj\Release\main.o(.bss+0x38):main.cpp: first defined here

    obj\Release\kmeans.o(.bss+0x3c):kmeans.cpp: multiple definition of `img_nvg'

    obj\Release\main.o(.bss+0x3c):main.cpp: first defined here

    obj\Release\kmeans.o(.bss+0x40):kmeans.cpp: multiple definition of `img'

    obj\Release\main.o(.bss+0x40):main.cpp: first defined here

    collect2: ld returned 1 exit status

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

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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