Algo canny

Signaler
Messages postés
25
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
17 juin 2011
-
Messages postés
3
Date d'inscription
vendredi 27 mars 2009
Statut
Membre
Dernière intervention
31 mai 2009
-
Slt tt le monde,,
Je veux detecter les contours d'une image avec l'algorithme de canny  en utilisant le langage c++  ..je veux un simple code( en c++ )qui traite  l'algorithme de canny sans utiliser un classe externe.
 
qq1 peut m'aider???

22 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Une simple recherche sur ce site t'aurai permis de trouver ma source:
http://www.cppfrance.com/codes/DETECTION-OPTIMALE-CONTOURS-CANNY-DERICHE-SHENCASTAN_45999.aspx
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
3
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
15 mai 2009

Slt
merci pr ta reponse mais j'ai deja compilé votre code et ca me donne tjrs un pb de la CIMAGE.lib
voila les erreurs detecté los de l'execution:

Linking...
Canny.obj : error LNK2001: unresolved external symbol "public: bool __thiscall CImage::ContrasteAuto(int,class CImage *)" ([mailto:?ContrasteAuto@CImage@@QAE_NHPAV1@@Z ?ContrasteAuto@CImage@@QAE_NHPAV1@@Z])
Canny.obj : error LNK2001: unresolved external symbol "public: __thiscall CImage::CImage(void)" ([mailto:??0CImage@@QAE@XZ ??0CImage@@QAE@XZ])
Canny.obj : error LNK2001: unresolved external symbol "public: void __thiscall CImage::Copy(class CImage const *)" ([mailto:?Copy@CImage@@QAEXPBV1@@Z ?Copy@CImage@@QAEXPBV1@@Z])
Canny.obj : error LNK2001: unresolved external symbol "public: double __thiscall CImage::GetPixel(int,int,int)" ([mailto:?GetPixel@CImage@@QAENHHH@Z ?GetPixel@CImage@@QAENHHH@Z])
Canny.obj : error LNK2001: unresolved external symbol "public: void __thiscall CImage::SetPixel(int,int,int,int,int)" ([mailto:?SetPixel@CImage@@QAEXHHHHH@Z ?SetPixel@CImage@@QAEXHHHHH@Z])
Canny.obj : error LNK2001: unresolved external symbol "private: void __thiscall CImage::Nettoyage(void)" ([mailto:?Nettoyage@CImage@@AAEXXZ ?Nettoyage@CImage@@AAEXXZ])
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/Canny.exe : fatal error LNK1120: 7 unresolved externals
Error executing link.exe.

alors qoi faire??(en sachant que j'utilise vc++ version 6°
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Les fonctions citées sont utilisées par la fonction canny. Tu dois les ajouter au projet, ou les réécrire toi même. (elles sont dans d'autres fichiers)
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
25
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
17 juin 2011

Slt,
Merci bcq pour vos reponses mnt j'ai auccun probleme dans l'implementation de canny mais une fois j'applique la methode de canny sur mon bitmap et j'enregistre le resultat dans un autre fichier j'obtient une image totalement noir... je sais pas pqoi.

voila le code qe j'utilise pour appller la fonction de canny :

CImage *Img1,Img2;
float s=1.0;
Img1=new CImage("bmp32.bmp");
Img1->Canny(&Img2,NULL,s);
HWND hwnd;
Img2.Save(hwnd,"4.bmp");

SVP pouvez vs me donner une solution??
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Ton image n'est pas noir du tout... Cependant ton oeil est incapable de le voir car il y a que de faible variation de noir.
Il faut faire un seuillage de seuil 1 ou 2.
Img2.Threashold(2);
Img2.Save(hwnd,"4.bmp");
A+

____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
25
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
17 juin 2011

j'ai fait ce que vs m'avez dit ,mais il me donne une erreur :    error C2660: 'Threashold' : function does not take 2 parameters
c'est  pour ca j'ai ecrit : Img2.Threashold(1,2,NULL); et ca me donne plus d'erreur mais tjrs donne image totalement noir...
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Essaye avec cela:
Img2.Threashold(GRAY,2,&Img3);
Je vais regardé ma fonction pour voir ou est le problème.
A+

____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
25
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
17 juin 2011

tjrs le meme pb
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Essaye alors sur une autre image.
Tu peux aussi tester plus facilement avec mon interface graphique.
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
25
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
17 juin 2011

on uttilise des images en nuances de gris n'est ce pas??
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Oui mais de toute façon, l'algorithme convertie les images couleur en niveau de gris.

____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
25
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
17 juin 2011

lors de la compilation il me donne cette erreur:
local variable 'hwnd' used without having been initialized

mais il s'execute et le resultat comme tjrs "image noir"  je sais pas d'ouvient le pb??
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Ton warning n'a aucun lien: initialise le à 0 si tu veux supprimer le warning.
Tu as essayé avec mon interface?
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
25
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
17 juin 2011

Merci bcq pr ton aide,,j'ai essayé le meme code sur un autre ordinateur et ca marche a merveille....(je pense que c'est un pb ds mon pc)
merci bien pour ton aide..
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Bonne nouvelle pour toi, un peu moins pour moi... Cela veux dire qu'il y a un problème sur mon prog.
Bonne continuation
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
25
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
17 juin 2011

Slt...
j'ai rencontré un autre pb dans implementation de votre code concernat la transformé de Hough....
je veux detecter les cercles qui existent dans une image et pour simplifier la tache j'ai dessiner des cercles en utilisant le paint
sur laquelle j'ai appliqué le code suivant :


CImage * m_img,*m_img1;
m_img=new CImage("3.bmp");
m_img1=new CImage();
HWND hwnd;
hwnd=0;
m_img->thrOtsu();
m_img->HoughCircle(2,m_img1);
m_img->Save(hwnd,"111.bmp");

mais il me donne tjrs l'image doit etre binaire et je sais plus quoi faire.
pouvez vs me repondre??
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
La fonction thrOtsu retourne le seuil optimale, il ne fait en aucun cas le seuillage.
Il faut faire :
m_img->threashold(GRAY,m_img->thrOtsu);

Pour plus d'info sur les fonction, il faut consulter mon site internet, il y a un petit descriptif de chaque fonction ainsi qu'un exemple.
http://imanalyse.free.fr/?page=Sources/Sources
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
25
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
17 juin 2011

Slt,
merci pour le lien il est vraiment interesssant...j'ai ajouté ce que vs m'avez conseillé de faire :

CImage *m_img=0,m_img1,m_img2;
m_img=new CImage("3.bmp");
m_img1=new CImage();
HWND hwnd;
hwnd=0;
m_img->Threashold(GRAY,2,m_img->thrFuzzy());
m_img->HoughCircle(110,&m_img1);
m_img1.Save(hwnd,"111.bmp");

mais voila la faute que j'obtient :

C:\Documents and Settings\Administrateur\Bureau\pfe-slima\SALMA-Projet\slima-projet\projet\projet\main.cpp(79) : error C2664: 'Threashold' : cannot convert parameter 3 from 'int' to 'class CImage *'

alors que dois je faire???
Messages postés
3
Date d'inscription
vendredi 27 mars 2009
Statut
Membre
Dernière intervention
31 mai 2009

Salut tt le monde
j'ai un petit pb concernant transformé de hough,,j'ai essayé votre code "Pistol_Pete" de detection de cercle et ca marche tres bien sauf qu'il traite des cercles dont on fixe deja le rayon dans le programme et pas n'importe  quelle cercle ds l'image .Par exemple si on a des differents cercles avec des differents rayons et on veut detecter ts les cercle de l'image qu'est ce qu'on doit faire??
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
>> Salma: La fonction  Threashold:  m_img->Threashold(GRAY,2,m_img->thrFuzzy()); ne fonctionne pas comme cela:

Le premier paramètre correspond aux canaux que l'on veut traiter, le second est le seuil du seuillage et le troisième est l'image destination: donc cela donne:
m_img->Threashold(GRAY,m_img->thrFuzzy(),&m_Img2);
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr