2016-12-27 2 views
1

Je suis nouveau à OpenCV si quelqu'un peut aider à la réponse donnée here pour mieux understanding.I ne suis pas en mesure d'obtenir ce qui est « angle » et « carré » dans le code suivantOpenCV La détection d'une feuille de papier

   if (approx.size() == 4 && 
       fabs(contourArea(Mat(approx))) > 1000 && 
       isContourConvex(Mat(approx))) 
      { 
       double maxCosine = 0; 

       for (int j = 2; j < 5; j++) 
       { 
        CGFloat angle; 
        double cosine = fabs(angle(approx[j%4], approx[j-2], approx[j-1])); 
        maxCosine = MAX(maxCosine, cosine); 
       } 

       if (maxCosine < 0.3) 
        squares.push_back(approx); 
      } 

Répondre

0

J'ai travaillé sur ma question hier soir et j'ai obtenu ma réponse ici

std::vector<std::vector<cv::Point> > squares; 
double angle(cv::Point pt1, cv::Point pt2, cv::Point 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); 

0

Angle est une fonction en haut de la question. Il prend 3 points et renvoie une valeur d'angle.

Il semble que les carrés soient une sorte de structure de données de vecteurs. Mon C++ est rouillé, donc je ne peux pas analyser cette déclaration de type sans faire plus de recherche (et je n'ai pas eu assez de café pour ça.)