Filtres [Résolu]

Messages postés
6
Date d'inscription
mardi 4 octobre 2005
Dernière intervention
10 mai 2006
- - Dernière réponse : vadeon
Messages postés
6
Date d'inscription
mardi 4 octobre 2005
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.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
14289
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
14 décembre 2018
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de BunoCS
Messages postés
14289
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
14 décembre 2018
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de BunoCS
Messages postés
14289
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
14 décembre 2018
0
Merci
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
Commenter la réponse de BunoCS
Messages postés
6
Date d'inscription
mardi 4 octobre 2005
Dernière intervention
10 mai 2006
0
Merci
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 */
Commenter la réponse de vadeon
Messages postés
788
Date d'inscription
mardi 8 juillet 2003
Dernière intervention
8 mars 2017
0
Merci
l'image est rafraichie pendant la procédure?

louis14
Commenter la réponse de cs_louis14
Messages postés
6
Date d'inscription
mardi 4 octobre 2005
Dernière intervention
10 mai 2006
0
Merci
Oui l'image est rafraichit



Bruno, que me conseil tu de faire dans ce cas?
Commenter la réponse de vadeon
Messages postés
6
Date d'inscription
mardi 4 octobre 2005
Dernière intervention
10 mai 2006
0
Merci
Merci beaucoups!
Commenter la réponse de vadeon

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.