c'est un probleme d'edition des liens entre les fichiers du projet
je suis nouveau dans ce forum , merci beaucoup pour vos reponse :mrgreen: , 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);