Traitement d'image : Detection de contour

Résolu
Bambi07 Messages postés 9 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 11 janvier 2005 - 3 janv. 2005 à 15:35
MILAHA13 Messages postés 10 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 22 septembre 2010 - 4 avril 2010 à 10:04
je cherche à déterminer les contours d'un objet dans une image en niveaux de gris.
Tous les pixels de l'objet sont quasiment au meme niveau de gris et le fond de l'image est totalement différent.

j'ai lu les différents codes sur la détection de contour présents sur le site, mais je n'ai rien compris...

merci d'avance.
A voir également:

17 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
7 janv. 2005 à 09:35
Crois-moi c'est loin d'être compliqué ce genre de manipulation graphique ! ;)



Bon, reprenons dans l'ordre :



Tout d'abord, il faut parcourir tes pixels 1 à 1, par exemple :



for (int i=0; i<LargeurImage; i++)

for (int j=0; j<HauteurImage; j++)

{

PixelCourant = GetPixel(Image.hDC, i, j);

}



Avec cette boucle, tu récupère la couleur de chaque pixel, or toi ce
que tu veux, c'est définir la couleur du pixel selon les couleurs des
autres pixels !

Il te faut donc récupèrer les couleurs des pixels adjacents :



Pixel1 = GetPixel(Image.hDC, i-1, j-1);

Pixel2 = GetPixel(Image.hDC, i-1, j);

Pixel3 = GetPixel(Image.hDC, i-1, j+1);

Pixel4 = GetPixel(Image.hDC, i+1, j-1);

Pixel5 = GetPixel(Image.hDC, i+1, j);

Pixel6 = GetPixel(Image.hDC, i+1, j+1);


Ensuite, il te faut appliquer la matrice :



PixelCourant = Pixel1 - Pixel2 - Pixel3 + Pixel4 + Pixel5 + Pixel6;



Et enfin, tu applique la couleur au pixel courant

SetPixel(Image.hDC, i, j, PixelCourant);



Au final, cela donne :


for (int i=0; i<LargeurImage; i++)


for (int j=0; j<HauteurImage; j++)


{


Pixel1 = GetPixel(Image.hDC, i-1, j-1);

Pixel2 = GetPixel(Image.hDC, i-1, j);

Pixel3 = GetPixel(Image.hDC, i-1, j+1);

Pixel4 = GetPixel(Image.hDC, i+1, j-1);

Pixel5 = GetPixel(Image.hDC, i+1, j);

Pixel6 = GetPixel(Image.hDC, i+1, j+1);



PixelCourant = Pixel1 - Pixel2 - Pixel3 + Pixel4 + Pixel5 + Pixel6;



SetPixel(Image.hDC, i, i, PixelCourant);


}


Bon
par contre, vu que GetPixel te renvoie des couleurs en RGB, et que
SetPixel demande du RGB, il te faut convertir les couleurs de Pixel1 à
Pixel6 en niveau de gris, puis les reconvertir en couleur avant de les
appliquer.



Ceci est pour de la prog sous Windows en utilisant les API Win32 de la
gdi32 ! Mais je pense que tu dois programmer sous Linux, non ? A ce
moment là, il te suffit de remplacer les fonction GetPixel et SetPixel
par les fonctions Linux équivalent (je ne les connait pas).



DarK Sidious

[Administrateur et responsable VB/API du site ProgOtoP]
1