2010-07-06 4 views
1

Je souhaite définir l'orientation et l'emplacement du rectangle à partir de la webcam. J'ai utilisé l'algorithme camshift, mais il a donné de mauvais résultats (forte dépendance à l'éclairage). Dites-moi quels mécanismes existent pour résoudre ce problème. Peut-être quitte le code source avec un programme similaire?Suivi de rectangles avec opencv

Répondre

0

Ce n'est qu'une idée.

Je pense généralement à la discrimination pour séparer l'objet que je veux détecter/suivre. Je sais que vous pouvez détecter des rectangles en utilisant d'autres méthodes.

Je préfère obtenir une image binarisée que seul mon objet, ou quelques-uns d'entre eux incluant mon objet cible, incluent.

Après cela, travaillez avec des blobs. J'utilise la bibliothèque cvBlobs et j'ai l'option de suivre les blobs et de détecter les blobs. Dans cette bibliothèque, la méthode est d'obtenir un angle (orientation), vous pouvez essayer cette option.

double cvAngle(CvBlob *blob); 

Si vos rectangles se déplace essayer de le détecter en utilisant la différence entre les images.

Sory pour ce long discours. Je souhaite que cela pourrait vous aider. Jorge

0

Je ne suis pas tout à fait sûr de ce que « Rectangle » vous parlez, quelques captures d'écran ou une meilleure description serait génial:

1: Si vous avez des problèmes avec la foudre, vous devriez envisager de développer vos propres algorithmes pour neutraliser le bruit, en convertissant votre image en une image binaire et faire la soustraction d'arrière-plan (selon l'installation et l'initialisation), éroder et dilater etc., bien que ce soit un autre long sujet qui mérite d'être étudié.

2: Qu'est-ce que vous pouvez faire est d'abord, vous trouverez tous les contours autour de votre rectangle, cela peut être fait avec la fonction OpenCV findContours(); (Souvenons image doit être binaire) Stocké tous vos points de contour, vous pouvez par la suite envoyer les informations à une autre fonction OpenCV minAreaRect();

Stockez les informations de minAreaRect(), qui est une structure de type RotatedRect; au sein d'une variable, et plongez dans la struct pour extraire le degré de rotation avec:

variablename.degree

0

Il est bon Algoritm réalisable dans l'échantillon, le dossier OpenCV = square.cpp. Besoin d'un petit remake (int main) pour la vidéo (CvCapture) sauf image. Cela fonctionne bien.