Filtres [Résolu]

vadeon 6 Messages postés mardi 4 octobre 2005Date d'inscription 10 mai 2006 Dernière intervention - 12 avril 2006 à 09:53 - Dernière réponse : vadeon 6 Messages postés mardi 4 octobre 2005Date d'inscription 10 mai 2006 Dernière intervention
- 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
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 12 avril 2006 à 10:10
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

Merci BunoCS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de BunoCS
Meilleure réponse
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 12 avril 2006 à 10:32
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

Merci BunoCS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de BunoCS
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 12 avril 2006 à 10:04
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
vadeon 6 Messages postés mardi 4 octobre 2005Date d'inscription 10 mai 2006 Dernière intervention - 12 avril 2006 à 10:05
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
cs_louis14 788 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention - 12 avril 2006 à 10:05
0
Merci
l'image est rafraichie pendant la procédure?

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



Bruno, que me conseil tu de faire dans ce cas?
Commenter la réponse de vadeon
vadeon 6 Messages postés mardi 4 octobre 2005Date d'inscription 10 mai 2006 Dernière intervention - 12 avril 2006 à 11:25
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.