2012-07-01 3 views
4

Je fais un projet sur la détection d'objet en utilisant javacv en ce que j'ai passé en revue quelques exemples de code qui utilisent pour détecter des rectangles et j'ai trouvé que tous les exemples de code contiennent la méthode suivante dans ces classes.Quelle est la signification de la méthode suivante dans opencv?

S'il vous plaît quelqu'un peut-il expliquer la signification ou l'utilisation de cette méthode.

double angle(CvPoint* pt1, CvPoint* pt2, CvPoint* pt0) 
{ 
    double dx1 = pt1->x - pt0->x; 
    double dy1 = pt1->y - pt0->y; 
    double dx2 = pt2->x - pt0->x; 
    double dy2 = pt2->y - pt0->y; 
    return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10); 
} 

This est la source de cette méthode.

Répondre

7

Comme vous pouvez le deviner calcule cosinus de l'angle de deux vecteurs (PT1, PT0), (PT2, PT0)

La formule est comme ceci: Cos(theta) = DotProduct(a,b)/(length(a) * length(b))

enter image description here

Pour la dernière partie 1e-10, c'est probablement pour éviter la division par erreur nulle sur les vecteurs de longueur nulle.

Questions connexes