Bonjour à tous, je galère depuis quelques temps pour essayer de
comprendre un programme que je suis en train de revoir et d'améliorer.
Actuellement, il existe deux programmes, un premier (grab) qui permet
de récupérer une image provenant d'une caméra (768*576, niveau xde gris
sur 8bits -> 256). Ce programme sauvegarde l'image récupérée dans un
fichier .raw d'environ 450ko.
Le deuxième programme effectue un traitement sur cette image. Pour ce
faire, il doit d'abord charger cette image. Or, le traitement (un truc
mathématique) se fait sur des valeurs en float (nécessité d'avoir des
nombres complexes etc...), et sur des images en 512*512 (en fait des
matrices en 2^n, pour la rapidité).
Il existe donc une fonction (ci dessous) qui permet de charger l'image, la redimensionner, et "convertir les pixels en float".
Une partie de mon travail consiste à regrouper ces deux programmes de
telle sorte que j'acquiert l'image de la caméra, je fais le traitement,
et je l'affiche aussitôt.
Code :
float *chargement_image(int *IX,int *JY)
{
FILE *dfraw; /* descripteur fichier image */
float *pixelfloat,*pimage;
unsigned char *pixel;
/********** allocation mémoires ******************************************/
pixelfloat=pimage=(float*)malloc((*IX)*(*JY)*sizeof(float));
pixel=(unsigned char*)malloc(sony_X*sony_Y);
/************** lecture de l'image dans pointeur pixel ************************/
dfraw=fopen(nom_raw,"rb");
fread(pixel,sony_X,sony_Y,dfraw);
/************** conversion image en 512*512 floats ******************/
for(j=0;j<sony_Y;j++)
{
if(j<512)
for(i=0;i<sony_X;i++)
{
if(i<512)
{
*pixelfloat=(float)(*pixel);
pixelfloat++;
}
pixel++;
}
/***** sinon, on arrête la lecture de l'image ***/
}
fclose(dfraw);
return(pimage); /** renvoi de l'image en floats***/
}
Dans cette fonction, on lit tous les pixels provenant du fichier les
uns après les autres au format "unsigned char" (logique car 8bits), et
on les convertit en float (eventuellement : si ces pixels sont dans la
plage des 512*512).
Le pointeur renvoyé est donc l'adresse à laquelle se trouve l'image, en floats.
Mon problème est le suivant. Puisque je n'enregistre plus l'image, je
dois convertir en float directement ce qui me vient de la caméra ! or,
cette chose est un type de données (MIL_ID spécifique à matrox) de
4octets qui contient 4 pixels. (par exemple, si je veux que mes 4
premiers pixels de mon image soient au niveau de gris 200, la première
valeur 'MIL_ID' sera 0xc8c8c8c8).
Je dois donc récupérer chaque octet de ce type de variable, et le
convertir en float (si j'ai bien compris, d'apres le bout de programme
ci dessus, un float contient un pixel ?).
voilà, j'espere que j'ai été clair, n'hésitez pas à me poser des
questions dans le cas contraire, je suis un peu dans la .... et à force
j'arrive plus à rien !
Merci à vous !