我是OpenCV的新手,所以任何人都可以帮助我提供here给出的答案,以便更好地理解。我无法在下面的代码中得到“angle”和“square”的内容
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);
}
答案 0 :(得分:0)
角度是一个位于问题顶部的函数。它需要3个点并返回一个角度值。
看起来正方形是某种向量的数据结构。我的C ++很生疏,所以我无法进行更多的研究来解析那种类型的声明(而且我还没有足够的咖啡。)
答案 1 :(得分:0)
我昨晚处理了我的问题并在此处得到了答案
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);
}