OpenCV 检测 sheet 张纸

OpenCV Detecting a sheet of paper

我是 OpenCV 的新手所以任何人都可以帮助更好地给出 here 的答案 understanding.I 我无法得到下面的 "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);
            }

角度是问题顶部的函数。它需要 3 个点和 returns 一个角度值。

看起来正方形是某种向量数据结构。我的 C++ 生锈了,所以我无法在不做更多研究的情况下解析该类型声明(而且我还没有喝足够的咖啡。)

昨晚处理了我的问题,在这里得到了答案

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);

}