Bonjour (ou Bonsoir à tous )

Voila , je suis nouvelle dans le forum , et sur le point d'arracher mes cheveux !

Je débute en traitement d'images , et j'utilise le langace C ( sous Dev) ,
je veux extraire la matrice d'une image , pour avoir l'image luminance ,et appliquer un seuillage par la suite ...

Mais impossible d'acceder à ces étapes , puisque je bloque sur l'extraction de la fameuse matrice

j'ai établi un code , mais il ne fonctionne pas correctement .

toute aide , correction , proposition , sont les bienvenues !

voici le code en question :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#include <stdio.h>
#include <stdlib.h>
#include <string.h>  // Pour la fonction strcat
 
#define DEBUG        // Pour eviter les Bugs
 
typedef unsigned char uc;   //pour faciliter la saisie
typedef unsigned int ui; 
typedef unsigned short us;
// Declaration de la structure de l'en tête du fichier
typedef struct {
        char sign[2];  // Signature BMP 
        ui total_size; // taille totale du fichier (sur 4 Octets)
     //???   int champ_res;
        int offset;
// Declaration de la structure de l'en tête de l'image
 
      ui  taille; //taille en tête image
      ui  largeur; //largeur (width)
      ui  hauteur; //hauteur (height)
      us  nbr_plans; // toujours egal à 1
      int codage;  // sur 1,4,8,16,24, ou 32 bits
      us  compression;  // = O si pas de compression , et 1 2 ou 3 selon types
      int  taille_tot; //taille totale de l'image en octets
      ui  resolution_h;  //la resolution horizontale (nbre pixels)
      ui  resolution_v;  // la resolution verticale
      ui  nbre_coul;  // nombre de couleurs 
      unsigned char* pixel;   
        }bitmap;
////////////////////////////////////////////////////////
        //prototypes des fcts
bitmap* lecture(char*) ;
int conv (uc hex[4],ui) ;
 
//??int vect[10304]; 
int main(int argc, char *argv[])
{   
    //declaration des variables utiles dans notre programme
    int h,l,i=0,j=0,k,nbl,nbc; 
    char nom[100],et[54];  unsigned char A[320],R[240][320],x,V[240][320],B[240][320],x1,x2; 
    bitmap *b;   // recupération des infos de l'image
 
    FILE* fp;
 
    // Recup du nom de l'image
    printf("Entrez le nom de l'image \n"); 
    gets(nom);  
    strcat(nom,".bmp");  
    printf("Nom de l'image avec l'extension : %s\n",nom); 
    // ouverture du fichier
    b=lecture(nom); 
    fp=fopen(nom,"r"); 
     //si l'image n'existe pas on affiche un message d'erreur
      if (fp==NULL){ 
       printf("Ouverture impossible de %s\n  ( - Erreur : Image introuvable )  \n",nom); 
       scanf("%*c"); 
       exit(0); 
                }
     //sinon on récupèr les infos   
 
     //
 
     printf("La signature BMP de l'image :%.2s\n",b->sign);
     printf("Taille du Fichier : %d \n ",b->total_size);
     printf("Offset de l'image : %d \n",b->offset);
     printf("Taille en tete de l'image : %d\n",b->taille);
     printf("Largeur (nombre de colonnes : %d \n",b->largeur);
     printf("Hauteur (nombre de lignes :%d \n",b->hauteur);
     printf("Nombre de plans : %d\n",b->nbr_plans);
     printf("Codage : %d\n",b->codage);
     printf("Compression : %d\n",b->compression);
     printf("Taille totale de l'image : %d\n",b->taille_tot);
     printf("Resolution Horizontale :%d\n",b->resolution_h);
     printf("Resolution Verticale : %d\n",b->resolution_v);
     printf("Nombre de couleurs :%d\n",b->nbre_coul);
 
    h=b->hauteur;
    l=b->largeur;
    printf("Lignes : %d Colonnes : %d\n",h,l);
    fclose(fp);
 
    fp=fopen(nom,"rb");
    fread(et,sizeof(char),54,fp);
    // Matrice 
    nbc=l/2;nbl=nbl/2;
    printf("La matrice a ete divisee en deux : \nNombre lignes :%d Nombre colonnes:%d\n",h,nbc);
 
     for(j=0;j<20;j++) { 
     for (i=0;i<nbc;i++)
      {  R[j][i]=0;}}
 
    for(j=0;j<20;j++) { 
     for (i=0;i<nbc;i++)
      {
      R[j][i]=*(b->pixel)++;
      printf("%d ",R[j][i]);
 
                           }printf("\n fin de la ligne %d\n",j);}
 
 
 
 
 
 
 
 
     fclose(fp);
     printf("%d",x1);
 
    /* fp=fopen("rouge.ima","wb");
         for (i=0;i<h;i++)
      {
           for(j=0;j<l;j++)
       A[j]=R[i][j];
       fwrite(A,sizeof(unsigned char),l,fp);
       printf("%d ",A[j]);
      }
        fclose(fp);*/
 
 
 
 
 
 
 
 
 
    ////// Affichage de la matrice /////////////////////:
//////: Avec sdl ////////           
// for(i = 0 ; i < monImage.w * monImage.h ; i+=3)
//{
  //  imageRGB[i]; // Red
   // imageRGB[i+1]; // Green
    //imageRGB[i+2]; // Blue
//} 
 
#ifdef DEBUG 
printf("fin du programme"); 
scanf("%*c"); 
#endif    
 
 system("PAUSE");
 
 
}
 
 
    ////////////////////////////////////////////// FONCTIONS //////////////////////////////////////////////////////////////
  bitmap* lecture(char* nom)
{
    uc temp[4];    // chaine de carac temporaire qui sera utilisé pour récupérer les différentes infos     
    bitmap *bmp;        // La variable que renvoie bitmap()
    FILE *fichier;        
    bmp=(bitmap*)malloc(sizeof(bitmap)); // on alloue dynamiquement le pointeur sur bitmap
    fichier = fopen(nom,"r");     // on ouvre le fichier en lecture seule
    fread (bmp->sign,2,1,fichier);    // on récupère la signature
 
    fread (&temp,4,1,fichier);    //  la taille de l'image    
    bmp->taille_tot = conv(temp,4);   // que l'on converti en décimal 
 
    //fread (&temp,4,1,fichier); 	// la zone réservée
    //bmp->champ_res=conv(temp,4);
 
    fread (&temp,4,1,fichier);    // l'offset    
    bmp->offset = conv(temp,4);    // que l'on converti aussi 
 
    fread (&temp,4,1,fichier);    // taille de la zone info    
    bmp->taille= conv (temp,4);
 
    fread (&temp,4,1,fichier);    // la largeur de l'image    
    bmp->largeur = conv(temp,4);
 
    fread (&temp,4,1,fichier);    // la hauteur de l'image    
    bmp->hauteur = conv(temp,4);
 
    fread (&temp,2,1,fichier);    // le nombre de plans (=1)   
    bmp->nbr_plans = conv (temp,2);  
 
    fread (&temp,2,1,fichier);    // le mode d'affichage    
    bmp->codage = conv (temp,2);  
 
    fread (&temp,4,1,fichier);    // le format de compression    
    bmp->compression = conv (temp,4);  
 
    fread (&temp,4,1,fichier);    // la taille de l'image    
    bmp->total_size= conv (temp,4);
 
    fread (&temp,4,1,fichier);    // les résolutions horizontale
    bmp->resolution_h = conv (temp,4);    // et verticale
 
    fread (&temp,4,1,fichier);        
    bmp->resolution_v = conv (temp,4);
 
    fread (&temp,4,1,fichier);        
    bmp->nbre_coul = conv (temp,4);    // nbre de couleurs utilisées
 
    fclose (fichier);        // on ferme le fichier
 
    bmp->pixel=(unsigned char*)malloc(sizeof(bmp->taille_tot));
    fread(bmp->pixel,1,bmp->taille,fichier);
    return bmp;        // on retourne le pointeur sur la structure bitmap
}
 
 
 
int conv(unsigned char hex[4],unsigned int nb)
{
    int res=0,i;
    for (i=nb-1;i>=0;i--)res=res*256+hex[i];
    return res;
}
MERCI !

Ow .