OpenCV检测一张纸

时间:2016-12-27 13:25:22

标签: ios opencv document detection

我是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);
            }

2 个答案:

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

}