[C] image binarisée à l'envers

cs_elo29 Messages postés 70 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 26 avril 2006 - 22 févr. 2006 à 15:26
cs_elo29 Messages postés 70 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 26 avril 2006 - 22 févr. 2006 à 16:21
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

BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
22 févr. 2006 à 16:14
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
0
cs_elo29 Messages postés 70 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 26 avril 2006
22 févr. 2006 à 16:21
Ah ok merci; oui les lettres se retrouvent la tête en bas.Je fais ça!
0