Traitement d'images

Signaler
Messages postés
8
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
15 novembre 2009
-
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
-
Bonjour tout le monde, je veux appliquer des traitements sur une image avec le language C (non pas le C++) à l'aide d'un programme et je sais pas comment la lire, plus précisément, je l'ai sous forme de matrice dans un fichier et je veux utiliser cette matrice dans mon programme?

11 réponses

Messages postés
8
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
15 novembre 2009

Elle est si difficile ma question?!!!
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Relie bien ton poste et tu verras que tu ne donnes aucune informations utiles pour qu'on puisse t'aider.

Déjà tu veux lire une image, quel est le format, la compression, la résolution, le nombre de bit par pixel!!! Ya des bibliothèque pour ca!
Après, "je VEUX un code tout fait en C mais pas en C++"!!! Ça veux dire quoi ça. Tu n'est pas capable de faire toi même le transfert de C++ en C!!!

Regarde quand même sur sur mon site internet, y a un soft en traitement de l'image en C++ (C like), ca pourrait t'intéresser pour voir comment on met en place des algorithmes en traitement de l'image.

A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
8
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
15 novembre 2009

Bonsoir,
Pour le format c'est pas important du fait que j'ai enregistré l'image sous forme de matrice dans un fichier .txt, donc je veux juste lire cette matrice à partir de ce fichier.
mon pb se pose à ce niveau " lire des données enregistrées dans un fichier externe"
Si vous pouvez m'aider je vous envoie le programme.
Merci d'avance
Remarque, je suis débutante je me débrouille à peine avec le C donc je connais pas les bibléothèques du C++, c'est pour cela je prefere tout faire en C.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Regarde les fonctions fopen, fread, fclose...
Une fois que tu as lu tout ton fichier et que tu as placé tout dans un buffer, il faut que tu découpes ton buffer pour convertir chaque pixel en int
Tu vas faire cela grâce aux séparateurs que tu as placé (espace, virgule, tabulation, retour à la ligne...)

Montre ton code que tu utilises, on pourra t'aider mais pas faire ton travail à ta place.
A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
8
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
15 novembre 2009

Bonsoir,
Voilà mon code en C, mon problème est comment appeler la fonction load_values dans le main.
Précision: Le fichier "orig.txt" contient une matrice 256*256 que je veux remplir dans le main dans la matrice "f[256][256]".




****************************************
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MY_FILE "orig.txt"
#define BUFF_SIZE 1024


int load_values(float m[256][256])
{
char tmp[BUFF_SIZE];
FILE *f;
int i, j;

if (m == NULL)
return -1;
i = 0;
j = 0;
f = fopen(MY_FILE, "r");
if (f == NULL)
return -1;
while (fgets(tmp, sizeof(tmp), f) != NULL)
{
m[i][j] = atof(tmp);
i i 255 ? 0 : i++;
if (i == 0)
j++;
}
return 0;
}

int main()
{

int i,j;
int n=256;
float g1[n][n],g2[n][n];
float d1[n][n],d2[n][n],d[n][n];
float p1[256][256];
float p2[256][256];
float f[256][256];
// f c'est une matrice 256*256 elle est enregistree dans le fichier "orig.txt"
float norm[n][n];
float S[n][n];
float m [n][n];
float P1[n][n];
float P2[n][n];
float lambda = 0.8;
float tau = 3;
int z;

for (z=0; z<100; z++)
{

/*Calcul de la matrice divergence en direction de X*/
for(i=0;i<n;i++)
for(j=0;j<n;j++)
d1[i][j]=p1[i][j];

for(i=1;i<n-1;i++)
for(j=0;j<n;j++)
d1[i][j]= d1[i][j]-p1[i-1][j];

if(i=n-1)
for(j=0;j<n;j++)
d1[i][j]= - p1[i-1][j];

/*Calcul de la matrice divergence en direction de Y*/
for(i=0;i<n;i++)
for(j=0;j<n;j++)
d2[i][j]=p2[i][j];

for(i=0;i<n;i++)
for(j=1;j<n-1;j++)
d2[i][j]=d2[i][j]-p2[i][j-1];

if(j=n-1)
for(i=0;i<n;i++)
d2[i][j]= - p2[i][j-1];

for(i=0; i<n;i++)
{
for(j=0;j<n;j++)
d[i][j]= d1[i][j]+d2[i][j];
}


for(i=0; i<n; i++)
{
for(j=0;j<n;j++)
{
S[i][j] = d[i][j] - f[i][j];
m[i][j] = S[i][j] / lambda;
}
}


/*Calcul de la matrice gradient en direction de X*/
for(i=0;i<n;i++)
for(j=0;j<n;j++)
g1[i][j]= m[i+1][j]-m[i][j];

for(j=0;j<n;j++)
g1[n-1][j]=0;

/*Calcul de la matrice gradient en direction de Y*/
for(j=0;j<n;j++)
for(i=0;i<n;i++)
g2[i][j]= m[i][j+1]-m[i][j];

for(i=0;i<n;i++)
g2[i][n-1]=0;

// Calcul de la norme

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
norm[i][j]= sqrt(g1[i][j]*g1[i][j]+g2[i][j]*g2[i][j]);
}

// Calcul final

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)

P1[i][j] = (p1[i][j] + tau * g1[i][j])/(1 + tau * norm[i][j]);
P2[i][j] = (p2[i][j] + tau * g2[i][j])/(1 + tau * norm[i][j]);
}


// Reconstruction de p1 et p2

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)

p1[i][j] = P1[i][j];
p2[i][j] = P2[i][j];
}
}


return 0;
}
Messages postés
8
Date d'inscription
mercredi 21 septembre 2005
Statut
Membre
Dernière intervention
30 mars 2010

Salut,

Peux-tu me dire quelle méthode utilises-tu pour traiter ton image, comment tu fais pour passer d'une image à une matrice?

Merci!
Messages postés
8
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
15 novembre 2009

bonsoir,
J'ai utilisé Matlab pour lire l'image, j'ai récupéré la matrice que j'ai enregistré dans le fichier "orig.txt"
Messages postés
8
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
15 novembre 2009

Re,
J'ai utilisé cette méthode car je connais pas une méthode directe pour lire mon image avec le C,
Messages postés
14
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
18 novembre 2009

Bonjour,

As-tu exploré libjpeg (http://www.ijg.org/)?

Si tu n'avais pas été réfractaire au C++ tu aurais probablement trouvé ton bonheur avec Boost GIL (http://www.boost.org/doc/libs/1_40_0/libs/gil/doc/index.html).

jules
Messages postés
8
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
15 novembre 2009

Bonjour,
Je dois faire ce travail en C pas C++
merci, j'ai perdu espoir personne ne pourra le faire j'en suis sûre...
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
j'ai perdu espoir personne ne pourra le faire j'en suis sûre...


Nous on sait le faire, mais on va pas faire ton travail à ta place. Encore une fois regarde mes sources et tu trouveras plein d'exemple pour lire une image bmp jpeg et gif...
Pour les autres formats, j'utilise la lib gratuite FreeImage.
A+


____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.