Filtres

Résolu
vadeon Messages postés 6 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 10 mai 2006 - 12 avril 2006 à 09:53
vadeon Messages postés 6 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 10 mai 2006 - 12 avril 2006 à 11:25
Bonjours



Je dois filtrer une image prise par une caméra, afin d'en déterminer
les couleur et les forme qui se présenteront devant la caméra.

Les forme seron toujours cylindrique et les couleurs seront soit du vert, du bleu ou du rouge.

alors que je filtre mon image de format 640*480, mon scan s'arrete en plein milieu de l'image alors qu'il ne devrait pas.

7 réponses

BunoCS Messages postés 15473 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 103
12 avril 2006 à 10:10
rouge = (image[(y*640)+x] & 0xf100);
Si tu fais un masque avec F100, cela veut dire qu'un pixel tient sur 2 octets. Or, tu n'en tiens pas compte dans ta boucle

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
3
BunoCS Messages postés 15473 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 103
12 avril 2006 à 10:32
Quand tu fais le read, tu lis 307200 octets, donc 153600 pixels.
Il faut en lire 2x plus

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
3
BunoCS Messages postés 15473 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 103
12 avril 2006 à 10:04
Problème de boucle?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
vadeon Messages postés 6 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 10 mai 2006
12 avril 2006 à 10:05
Désolés! j'ai envoyer avant de rajouter mon code.

La partie des filtre se trouve dans la fonction Traitement_pixel.

Et voici ma question: Pourquoi mon scan s'arrete t'il au milieu de l'image



donc voici mon code:





/*Début du main*/



#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#include

#include <fcntl.h>

#include "prototype.h"



void main ()

{

unsigned short image[307200]; // tableau ou ranger l'image 307200= nb pixel (640*480)

long i;



ouverture(image);



traitement_pixel(image);



puts("les --- premier pixel:");

for(i=64000;i<=64300;i++)

{

printf("%x\n",image[i]);

}

}

/* fin du main*/









/*Début de la fonction Ouverture*/



#include <stdio.h>

#include

#include <fcntl.h>



void ouverture (unsigned short *image)

{

int file = _open("C:\\Documents
and Settings\\All Users\\Documents\\partacam\\acqui1.raw", _O_BINARY |
_O_RDONLY);



if (file!= -1) //si file est différent de -1 fichier ouvert

{

puts("fichier ouvert correctement");

int lecture=_read(file,image,307200); // lecture du fichier

if(lecture!=-1)

{

puts("fichier lu correctement");

}

else

{

puts("erreur de lecture");

}

}

else

{

puts("erreur d'ouverture du fichier acqui.raw");

}

_close(file);

}



/*Fin de la fonction Ouverture*/





/*Début de la fonction Traitement_pixel */



#include <stdio.h>

#include

#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>



void traitement_pixel(unsigned short *image)

{

int x,y;

int rouge,vert,bleu;

int file = _open("C:\\Documents and Settings\\All Users\\Documents\\partacam\\acqui1.raw",

_O_BINARY | _O_WRONLY | _O_CREAT, _S_IWRITE);



for(y=0; y<=479; y++)

{

for(x=0; x<=639; x++)

{

//masque pour supprimer le vert et le bleu

rouge = (image[(y*640)+x] & 0xf100);

//décalage du rouge de 11 bits vers la droite

rouge = rouge >>11;



//masque pour supprimer le rouge et le bleu

vert = (image[(y*640)+x] & 0x07e0);

//décalage du vert de 5 bits vers la droite

vert = vert >>5;



//masque pour
supprimer rouge et vert et transformer bleu en binaire

bleu = (image[(y*640)+x] & 0x001f);



if(
(rouge<11 && vert<22 && bleu<11)
) //si noir alors pixel mis à 0



image[(y*640)+x]=0;



if(
(rouge>11 && vert>8 && bleu>9)
) //si blanc alors pixel mis à FFFF



image[(y*640)+x]=0xFFFF;



}

}







int contour=_write(file,image,307200); // écriture du fichier



if(contour!=-1)

puts("traitement du contour realise correctement");



else

puts("erreur lors du traitement du contour");



}



/* Fin de la fonction Traitement_pixel */
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
12 avril 2006 à 10:05
l'image est rafraichie pendant la procédure?

louis14
0
vadeon Messages postés 6 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 10 mai 2006
12 avril 2006 à 10:24
Oui l'image est rafraichit



Bruno, que me conseil tu de faire dans ce cas?
0
vadeon Messages postés 6 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 10 mai 2006
12 avril 2006 à 11:25
Merci beaucoups!
0
Rejoignez-nous