选择Hough变换的参数

时间:2014-05-02 21:24:13

标签: image opencv image-processing edge-detection hough-transform

我正在尝试提取扫描图像中的矩形,如下所示:enter image description here 我正在使用OpenCV并关注this tutorial,我来到了这段代码

private static Mat detectLinesHough(Mat img) {
    Mat lines = new Mat();
    // Mat edges = new Mat();
    // Imgproc.Canny(img, edges, 20, 60);
    int threshold = 80;
    int minLineLength = 10;
    int maxLineGap = 5;
    double rho = 0.4;
    Imgproc.HoughLinesP(img, lines, rho, Math.PI / 180, threshold, minLineLength, maxLineGap);
    Imgproc.cvtColor(img, img, Imgproc.COLOR_GRAY2RGB);
    System.out.println(lines.cols());
    for (int x = 0; x < lines.cols(); x++) {
        double[] vec = lines.get(0, x);
        double x1 = vec[0], y1 = vec[1], x2 = vec[2], y2 = vec[3];
        Point start = new Point(x1, y1);
        Point end = new Point(x2, y2);
        Core.line(lines, start, end, new Scalar(0, 255, 0), 3);
    }
    return img;
}

例如,使用上面代码中的参数,我得到以下结果: enter image description here
结果不满意,所以问题是 - 如何选择参数来选择所有矩形而不是多个字母?

1 个答案:

答案 0 :(得分:0)

我有三条建议可以改善结果:

  1. 你应该制作minLineLength&#39;尽可能高的&#39; maxLineGap&#39;尽可能低,以便找到您搜索的行。

  2. 处理线条并检查角度,因为矩形线与x轴平行或垂直。您可以丢弃不在特定角度范围内的行。

  3. 寻找角落并丢弃未连接到角落的每条线。