Bambi07
Messages postés9Date d'inscriptionlundi 3 janvier 2005StatutMembreDernière intervention11 janvier 2005
-
3 janv. 2005 à 15:35
MILAHA13
Messages postés10Date d'inscriptionmercredi 7 avril 2010StatutMembreDernière intervention22 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...
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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 :
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]
Voir ma source que j'ai faîte en VB récemment pour tracer les contours
d'une forme, ou encore celle pour rendre flou les contours d'une forme
quelconque.
Cette source fonctionne pour des images en couleurs, mais fonctionne
également en niveaux de gris : il suffit de ne pas traitement les
pixels sous forme de 3 composantes, mais uniquement avec 1 seule
composante !
Bambi07
Messages postés9Date d'inscriptionlundi 3 janvier 2005StatutMembreDernière intervention11 janvier 2005 5 janv. 2005 à 17:13
je comprends pas trop le coup de la matrice... menfin merci quand meme
et puis je me rends compte que je suis pas encore arriver là...
il faudrait que je puisse gérer le fait que lorsque je clique sur l'image, le programme réagisse et qu'il relève le niveau de gris du pixel selectionné...
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 5 janv. 2005 à 17:51
Pour détecter le niveau de gris d'un pixel, utilise la fonction GetPixel
En fait, cette matrice marche comme cà :
Pour traiter un pixel de coordonnée (x, y), il faut récupèrer les
intensités des pixels voisins, et définir la nouvelle intensité du
pixel courant selon la matrice que je t'ai donné. Cela permet de tracer
les contours des formes.
DarK Sidious
[Administrateur et responsable VB/API du site ProgOtoP]
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bambi07
Messages postés9Date d'inscriptionlundi 3 janvier 2005StatutMembreDernière intervention11 janvier 2005 5 janv. 2005 à 18:54
ok merci pour l'explication sur la matrice...
oui en effet j'avais trouvé la fonction GetPixel et j'ai l'intention de m'en servir, mais ce que je ne trouve pas c'est comment faire pour étudier le pixel que je viens de sélectionner en cliquant avec la souris. en gros, les coordonnées qu'on donne à GetPixel doivent être celles de ce pixel sélectionné.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 5 janv. 2005 à 20:04
Utilise la fonction GetCursorPos pour récupèrer la position de ta
souris à l'écran, puis utilise la fonction ScreenToClient pour
récupèrer des coordonnées clientes à partir des coordonnées écran.
Ainsi, tu pourras savoir où se trouve la souris dans ton image.
DarK Sidious
[Administrateur et responsable VB/API du site ProgOtoP]
Bambi07
Messages postés9Date d'inscriptionlundi 3 janvier 2005StatutMembreDernière intervention11 janvier 2005 6 janv. 2005 à 10:21
merci, ca va bien m'aider
ScreenToClient a 2 paramètre. le 1er me pose un prob : c le handle (je ne comprend pas bien ce que c) de la fenetre et je ne sais pas koi y mettre (je sai que pour l'écran c'est : m_hDC)....
et puis, je voudrais récupérer les informations sur les coordonnées du curseur seulement lorsque je fait un clique gauche. comment je peux faire missieur, siouplai ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 6 janv. 2005 à 10:33
Le plus simple reste d'intercepter le message LBUTTONDOWN, de plus, le
handler de ce message permet de récupèrer les coordonnées de la souris
par le paramètre point :
// TODO : ajoutez ici le code de votre gestionnaire de messages et/ou les paramètres par défaut des appels
CDialog::OnLButtonDown(nFlags, point);
}
Donc crée une fonction interceptant le message WM_LBUTTONDOWN sur le
contrôle de ton choix, et elle se déclenchera uniquement lorsque
l'utilisateur cliqueras du bouton gauche de la souris sur le contrôle
voulu.
DarK Sidious
[Administrateur et responsable VB/API du site ProgOtoP]
comme ca j'arrive à faire réagir le programme quand je clique et qu'il y a une image affichée.
merci.
mai je sai pas koi mettre a la place des ..... pour récupérer des infos pour les utiliser dans ma classe pour traiter mon image...
et je ne sai pas comment intercepter le mess WM_LBUTTONDOWN (je me rappelle avoir vu un truc de ce genre en TP mais je me souvien pas où, quel cancre je suis !)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 6 janv. 2005 à 17:27
Pour intercepter le message WM_LBUTTONDOWN,
il te faut passer par le ClassWizard, mais normalement tu l'as fait
puisque tu as intégrer la fonction handler dans ton code !
Entre le ... il faut parcourir les pixels un à un et leur appliquer la
matrice, donc il faut parcourir ton image ligne par ligne pour chaque
colonnes, et appliquer la matrice à chaque pixel parcourut.
DarK Sidious
[Administrateur et responsable VB/API du site ProgOtoP]
Bambi07
Messages postés9Date d'inscriptionlundi 3 janvier 2005StatutMembreDernière intervention11 janvier 2005 7 janv. 2005 à 09:26
je parcours les pixels... mais je comprends pas comment tu peux appliquer ta matrice (j'ai relu ta soucre en VB mais ça ne m'a pas aidé à comprendre...)
d'ailleurs je ne comprends pas à QUOI tu applique la matrice....
désolé de poser autant de question , mais j'ai vraiment besoin d'aide et je suis vraiment nul en prog... (quel bande de sadiques ces prof de prog de nous filer des projets au delà de nos compétences !!)
KryztL
Messages postés7Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention21 août 2006 3 févr. 2005 à 22:08
Salut...
Je dois faire un projet assez similaire et je ne comprend pas a quoi correspond Image.hDC dans cette expression Pixel1 = GetPixel(Image.hDC, i-1, j-1);
vosu pourriez m aidez svp?
merci d avance
cs_Oussaama
Messages postés1Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention 5 juillet 2005 5 juil. 2005 à 13:42
Bonjour ...
désolé pour le retard mais un probleme similaire
mon projet est detecter en temps réel la position du centre de gravité d'un joueur de tennis. il faut calculer ses coordonnées x et y.
je pense à faire une segmentation ou binairisation pour avoir les pixels du joueur à 1 et le fond d'ecran à 0 mais je sais pas comment faire en programmation etant un debutant et quel langage utilisé pour traiter le flux video.
merci de me répondre le plus vite possible car j'ai vraiment besoin de vos aides