Algo canny

cs_salma2011 Messages postés 25 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 17 juin 2011 - 13 mai 2009 à 02:35
primarykey Messages postés 3 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 mai 2009 - 17 mai 2009 à 15:34
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

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
13 mai 2009 à 08:23
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
0
khadijasourire Messages postés 3 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 15 mai 2009
13 mai 2009 à 15:37
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°
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
13 mai 2009 à 16:29
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
0
cs_salma2011 Messages postés 25 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 17 juin 2011
14 mai 2009 à 13:39
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??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
14 mai 2009 à 13:48
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
0
cs_salma2011 Messages postés 25 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 17 juin 2011
14 mai 2009 à 14:09
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...
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
14 mai 2009 à 14:15
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
0
cs_salma2011 Messages postés 25 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 17 juin 2011
14 mai 2009 à 14:24
tjrs le meme pb
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
14 mai 2009 à 15:24
Essaye alors sur une autre image.
Tu peux aussi tester plus facilement avec mon interface graphique.
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
0
cs_salma2011 Messages postés 25 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 17 juin 2011
14 mai 2009 à 15:32
on uttilise des images en nuances de gris n'est ce pas??
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
14 mai 2009 à 15:35
Oui mais de toute façon, l'algorithme convertie les images couleur en niveau de gris.

____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
0
cs_salma2011 Messages postés 25 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 17 juin 2011
14 mai 2009 à 15:45
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??
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
14 mai 2009 à 16:06
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
0
cs_salma2011 Messages postés 25 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 17 juin 2011
14 mai 2009 à 22:16
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..
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
15 mai 2009 à 08:33
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
0
cs_salma2011 Messages postés 25 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 17 juin 2011
15 mai 2009 à 18:52
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??
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 mai 2009 à 14:45
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
0
cs_salma2011 Messages postés 25 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 17 juin 2011
16 mai 2009 à 20:19
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???
0
primarykey Messages postés 3 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 mai 2009
17 mai 2009 à 03:22
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??
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
17 mai 2009 à 13:28
>> 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
0
Rejoignez-nous