benlustr
Messages postés32Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention 5 juillet 2006
-
13 juin 2006 à 10:45
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 2007
-
13 juin 2006 à 17:16
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.
/************** 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***/
}
<!-- END TEMPLATE: bbcode_code -->
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 !
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 13 juin 2006 à 17:16
Imaginons un int qui contiendra les 4 premiers pixels (0xC8C8C8C8).
Tu fait :
unsigned char* pix = &premierspixels; //pix contient en fait un tableau de 4 unsigned char, qui correspondent à tes 4 pixels