Extraire la valeur d'un pixel d'une image
Bonjour,
Je me permets de vous exposer mon problème que je ne parviens pas à résoudre. Dans une partie de ma chaine de traitements, j'aimerais extraire la valeur d'un pixel dans une image (une classification en l'occurrence) dont les coordonnées (numéro de ligne et de colonne) sont présentes dans le fichier texte « point_ctrl.txt ». Cette valeur de pixel doit être ensuite enregistrée dans un autre fichier texte « numero_classe_eau.txt ».
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
#include <stdio.h>
#include <stdlib.h>
#define LARGEUR 5058 // Largeur à modifier en fonction de l'image d'entrée
#define HAUTEUR 7112 // Hauteur à modifier en fonction de l'image d'entrée
//--------------------------------------------------
// Déclaration des variables
//--------------------------------------------------
unsigned char image[LARGEUR][HAUTEUR]; // la matrice de l'image originale
char nomFichier[] = "Image\\KmeansSTEP2withMask_output.tif "; // nom du fichier image à lire
FILE* fichier; // la variable fichier
int pixel; // variable tampon
int x, y; // variables d'itération --> y-x : Hauteur-Largeur
int colonne, ligne ;
unsigned char class ;
/*********************************Fonctions***********************************/
int Recuperation_pt_ctrl()
{
FILE *Hfile ;
if((Hfile=fopen("point_ctrl.txt", "r"))==NULL)
{
fprintf(stderr, "Erreur d'ouverture du fichier .txt\n") ;
return EXIT_FAILURE ;
}
while(!feof(Hfile)) // feof (END OF FILE) indique la fin du fichier (marquage automatique lors ouverture)
{
if((fscanf(Hfile, "colonne=%d\n", &colonne))==1)
{
}
else if((fscanf(Hfile, "ligne=%d\n", &ligne))==1)
{
}
}
fclose(Hfile) ;
return 0;
}
int Selection_class_hydro()
{
//--------------------------------------------------
// Lecture du ou des fichier(s)
//--------------------------------------------------
// Image 1 (la plus couramment utilisée)
fichier = fopen( nomFichier, "rb" ); // ouverture du fichier en lecture binaire (rb)
if( fichier==0 )
{ // Erreur d'ouverture
printf( "Desole, mais le fichier est introuvable ! Le programme va s'arreter..." );
return 1;
}
printf( ">> Lecture de l'image \"%s\" [", nomFichier );
for( y=0; y<HAUTEUR; y++ )
{ // lecture sur l'axe Y
for( x=0; x<LARGEUR; x++ )
{ // lecture sur l'axe X (=lecture d'une ligne)
image[x][y] = fgetc(fichier);
}
}
fclose(fichier); // fermeture du fichier
printf( "]\n>> Lecture de l'image terminee !\n" );
//--------------------------------------------------
// Selection de la classe
//--------------------------------------------------
class = image[colonne][ligne] ;
printf( "%d -" , class);
return 0;
}
int Export_classe ()
{
FILE * pFile;
pFile = fopen ("numero_classe_eau.txt","w");
fprintf (pFile, "%d \n",class);
printf ("Export du numéro de classe dans le fichier texte terminee ");
fclose (pFile);
return 0;
}
/***********************************MAIN*************************************/
int main(int argc, char *argv[])
{
Recuperation_pt_ctrl(colonne, ligne) ;
printf("################### \n") ;
printf("%d \n", colonne) ;
printf("%d\n", ligne) ;
printf("################### \n") ;
Selection_class_hydro(class);
printf("\n ################### \n") ;
Export_classe ();
// printf("%d\n", class) ;
return EXIT_SUCCESS ;
} |
Ce dernier permet de récupérer les coordonnées du fichier .txt et de les affecter aux variables "ligne" et "colonne" néanmoins il retourne toujours une valeur de pixel incorrecte. Je ne comprends pas pourquoi.
L’écriture de cette valeur dans le fichier « numero_classe_eau.txt » s'effectue quant à elle correctement.
Pouvez-vous m'aider à y voir plus clair au sujet de l'extraction de la valeur du pixel ?
Je vous remercie par avance pour vos informations.
Azgard