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

  1. #1
    Membre régulier
    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
    Points : 92
    Points
    92
    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 !
    The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge.

  2. #2
    Membre régulier 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
    Points : 123
    Points
    123
    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
    newbie un jour, newbie toujours
    n'oubliez pas le

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Points : 34
    Points
    34
    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 régulier
    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
    Points : 92
    Points
    92
    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);
    The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge.

  5. #5
    Membre régulier 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
    Points : 123
    Points
    123
    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
    newbie un jour, newbie toujours
    n'oubliez pas le

  6. #6
    Membre régulier
    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
    Points : 92
    Points
    92
    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
    The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge.

  7. #7
    Membre actif Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Points : 230
    Points
    230
    Par défaut
    heuuuu oula! Ton main.h ne sert à rien...ce n'est pas une classe, laisse les variables dans le main.cpp au dessus de la fonction principale main()

    Stp utilise le "#" lorsque tu cites ton code, cela sera plus lisible et indenté

    Je pense que c'est ton main.h qui fait foirer le programme

  8. #8
    Membre régulier 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
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Le problème au "linkage" vient du fait que tu déclares des variables dans le fichier header et comme tu l'appelles deux fois avec un #include, le compilo t'avertit que tu les a déjà créé.
    Je te conseille de ne pas mettre de variables dans le .h et de les laisser dans le .cpp.
    D'une manière générale, évite de déclarer des variables globales et modifie tes fonctions pour qu'elles acceptent les paramètres dont tu as besoin. Si tu as trop de paramètres, utilise des structures ou fais des classes. Par exemple, tes variables class1 et class2 ne sont utilisées que dans ton main() donc déclare-les dedans.

    En espérant t'avoir aidé,

    A+,

    Hunta

    Edit : grillé
    newbie un jour, newbie toujours
    n'oubliez pas le

  9. #9
    Membre actif Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Points : 230
    Points
    230
    Par défaut


    Tu donnes des réponses trop classes Hunta, c'est tout à ton honneur

  10. #10
    Membre régulier
    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
    Points : 92
    Points
    92
    Par défaut
    supprimer le main.h donne naissance a nouveaux erreurs car kmeans.cpp a besoin des variables soit déclarés ! en fait j'ai trouver la réponse , je doit mettre les declarations dans main.cpp et ajouter "extern" pour les declaration dans main.h et yop ça tourne !
    The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge.

  11. #11
    Membre actif Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Points : 230
    Points
    230
    Par défaut
    C'est quelle école d'ingénieur où tu es ?

  12. #12
    Membre régulier 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
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Effectivement, on peut s'en tirer avec des extern mais vu la complexité de ton projet, je pense qu'il serait plus judicieux de mettre le tout sous une autre forme afin de s'en passer. Enfin bref, c'est mon avis (rabat-joie ).

    Le plus important étant que le sujet soit résolu.

    A+,

    Hunta
    newbie un jour, newbie toujours
    n'oubliez pas le

+ 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