使用 OpenCV 检测一张纸(正方形检测)
初始问题:
开发人员成功实现了 OpenCV 方形检测示例,但输出中充满了不必要的轮廓。目标是过滤结果以获得一张纸的四个角点以进行进一步处理。
建议的解决方案:
提供的代码片段使用以下方法检测正方形多个阈值级别并使用扩张消除边缘段之间的潜在空洞。然而,它并没有过滤掉杂乱。要解决此问题,请修改 find_squares 函数,如下所示:
void find_squares(Mat& image, vector<vector<Point> >& squares) { ... [code as before] ... // Filter out unnecessary contours and store the largest square vector<Point> largestSquare; double maxArea = 0; for (auto& square : squares) { double area = fabs(contourArea(Mat(square))); if (area > maxArea) { maxArea = area; largestSquare = square; } } squares.clear(); // Clear existing squares vector squares.push_back(largestSquare); // Store the largest square }
最终输出:
应用此修改后,生成的向量正方形将仅包含四个检测到的纸张的角点作为图像中最大的正方形。然后,这可以用于减少倾斜或进一步的图像处理任务。
以上是OpenCV如何优化才能准确检测一张纸的四个角?的详细内容。更多信息请关注PHP中文网其他相关文章!