Bonjour,
Je voulais savoir si OpenCv intégrait une fonction de détection de rectangles même si ces derniers ne sont pas correctement alignés à l'horizontal de l'image ?
Si non, existe-t-il des algorithmes pour cela ?
Merci !
Version imprimable
Bonjour,
Je voulais savoir si OpenCv intégrait une fonction de détection de rectangles même si ces derniers ne sont pas correctement alignés à l'horizontal de l'image ?
Si non, existe-t-il des algorithmes pour cela ?
Merci !
Salut,
Je ne crois pas qu'il existe de méthode directe pour extraire les rectangles sous openCV. Par contre, tu peux utiliser la transformée de Hough (cvhoughlines ou quelque chose du genre) pour récupérer les droites et en déduire tes rectangles.
A+
Hunta
Merci pour votre reponse !
En fait pour le moment je passe en niveaux de gris et j'applique l'algorithme de Canny afin de recuperer les contours.
J'explique quand meme que ce que je cherche a detecter sont des sortes de balises noires et blanches avec des motifs rectangulaires dans un environnement quelconque.
Du coup, une fois avec les contours, j'aimerai recuperer des points clefs qui sont des angles du motif au centre de la balise.
Je pense qu'il faudrait deja que je puisse "supprimer" le fond de l'image qui n'est pas la balise afin de ne pas detecter autre chose.
Mais apres ? Comment recuperer les donnees des contours ou simplement les angles ?
Merci beaucoup :)
Salut,
La transformée de Hough te permet de déterminer les alignements de pixels selon un certain angle. Du coup, quand tu trouves une droite, tu as directement sa longueur et l'angle associé (faire attention au repère pour l'angle, de tête il est un peu bizarre sous opencv). Je ne sais pas si c'est la méthode la plus adaptée pour ton problème mais ça ne coûte rien de regarder.
Si ça t'intéresse et que je retrouve mon code là-dessus, je le mettrai dans un futur post.
A+
Hunta
Ben je sais pas trop non plus vu que je ne connais pas bien OpenCV mais si je peux detecter les droites quelque soit leur alignement et les angles, je pense que je pourrai alors trouver mes "coins" et donc determiner les points qui m'interessent...
Je vais regarder Hough alors.
Si tu remets la main sur ton bout de code je suis effectivement interessee !
Merci beaucoup.
il y a deux exemples qui peuvent t'aider dans
<C:\Program Files\OpenCV>\samples\c :
-squares.c : programme de détection de rectangles (par morphomaths il me semble)
-lkdemo.c : ce programme commence par détecter des points caractéristiques, puis les suit par estimation du flot optique. Les "GoodFeaturesToTrack" pourraient bien t'aider.
Ouf en effet ca me semble plutot interessant !
Surtout squares.c qui apparemment permet de recuperer les contours et de calculer les angles, exactement ce qu'il me faut puisque ma forme ressemble a un "E" sans la barre horizontale du milieu...
Je vais voir si je peux en tirer quelque chose, merci beaucoup !
you can call me Al :kill:
EDIT: en fait j'ai reussi :) merci beaucoup !
Alors j'ai teste et bidouille l'exemple des squares pour que ca s'adapte a mon "crochet". C'est-a-dire qu'au lieu de detecter 4 points ayant des angles a 90, j'en cherche 8 qui forment une forme non convexe.
Apparemment il me trouve bien ma forme dans l'image car il me renvoit 8 points dans la boucle sur les contours.
J'arrive ensuite a recuperer ces points de la ou je les ai stocke mais impossible d'afficher le resultat.
J'obtiens une fenetre toute noire. Quelqu'un aurait une idee de pourquoi ?Code:
1
2
3 // draw the square as a closed polyline cvPolyLine( cpy, &rect, &count, 1, 1, CV_RGB(255,0,0), 4, CV_AA, 0 );
rect pointe sur le tableau contenant les points, cpy contient une copie de mon image sur laquelle je travaille et count=8.
Merci.
Tu es parti de la fonction drawSquare, je suppose si tu pouvais mettre en peu plus de code, pour savoir comment tu traite ta sequence.
Un chose qui peut être intéressante dans openCv c'est de transformer ta séquence de point en vector plus facile a utiliser.