[C] image binarisée à l'envers

Signaler
Messages postés
70
Date d'inscription
mardi 7 février 2006
Statut
Membre
Dernière intervention
26 avril 2006
-
Messages postés
70
Date d'inscription
mardi 7 février 2006
Statut
Membre
Dernière intervention
26 avril 2006
-
Bonjour,

Je travaille sur un code permettant de binariser une image , voici ce code :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


#define largeurimage 120
#define hauteurimage 80


int main(){

FILE * fichier;
// imageBMP est un tableau contenant les valeur R,G,et B de chaque pixel
unsigned char imageBMP[3*largeurimage*hauteurimage];
int *tempimBMP;
int **image;
unsigned char tmp[501];
int somme=0;
int seuil;

int i,j;



//Allocation mémoire de l'image en niveau de gris

tempimBMP=(int*)malloc(largeurimage*hauteurimage*sizeof(int));

//Récupération de l'image

fichier=fopen("test.bmp","rb");
if(!fichier)
{
printf ("Probleme d'ouverture du fichier image\n");
return 0;
}

fread (&tmp,54,1,fichier);
fread (&imageBMP,3*hauteurimage*largeurimage,1,fichier);//on met le fichier image dans le tableau
fclose(fichier);


//Passage en niveau de gris

for(i=0;i<largeurimage*hauteurimage;i++)
{
//imageBMP[i*3] sont les composantes red dans le tableau (RGBRGBRGB...)(0,3,6...)
//imageBMP[i*3+1] sont les composantes vertes...

tempimBMP[i]=(int)(0.3*imageBMP[i*3]+0.59*imageBMP[i*3+1]+0.11*imageBMP[i*3+2]);

}


//Allocation mémoire de l'image à tester

image=(int**)malloc(largeurimage*sizeof(int*));

for (i=0;i<hauteurimage;i++)
{
image[i]=(int*)malloc (largeurimage*sizeof(int));
}

//Initialisation de l'image à tester en niveau de gris (0-256)

for (i=0;i<hauteurimage;i++)
{
for(j=0;j<largeurimage;j++)
{
image[i][j]=tempimBMP[j+i*largeurimage];
}
}

//Calcul du seuil de l'image pour la transformation en binaire

for(i=0;i<hauteurimage;i++)
{
for (j=0;j<largeurimage;j++)
{
somme+=image[i][j];
}
}
seuil=somme/(hauteurimage*largeurimage);

//Passage en binaire

for(i=0;i<hauteurimage;i++)
{
for (j=0;j<largeurimage;j++)
{
if(image[i][j]<seuil)
{
image[i][j]=1;
}
else
{
image[i][j]=0;

}
}
}

for(i=0;i<hauteurimage;i++)
{
for (j=0;j<largeurimage;j++)
{
printf("%d",image[i][j]);
}

}

return 0;

}

Le problème c'est que lors de l'execution il m'affiche l'image binarisée mais à l'envers. Je n'arrive pas à trouver pourquoi, quelqu'un peut-il m'aider svp??

2 réponses

Messages postés
15154
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 octobre 2021
99
Quand tu as "à l'envers", tu veux dire que le haut se retrouve en bas, et vice-versa? C'est normal, le format BMP enregistre les images en partant de la fin (ie, le pixel en bas à droite). Il faut donc penser à renverser ton tableau...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
70
Date d'inscription
mardi 7 février 2006
Statut
Membre
Dernière intervention
26 avril 2006

Ah ok merci; oui les lettres se retrouvent la tête en bas.Je fais ça!