如何在OpenCV Android中合并由HoughLinesP产生的附近行?

时间:2017-08-25 15:50:44

标签: java android opencv hough-transform houghlinesp

我正在制作一个Android应用程序,用于检测数独谜题并找到相同的答案。在第一部分中,我需要从给定的图像中提取数独。我成功地使用HoughLinesP来找到包含盒子(数独),但由于图像中存在粗线,因此生成了大量的线条。我需要合并属于相同"粗线"的houghLines。单行,但我不能这样做。到目前为止我的代码:

    Mat inputMat = new Mat(inputBitmap.getHeight(), inputBitmap.getWidth(), CvType.CV_8UC1);
    Utils.bitmapToMat(inputBitmap, inputMat, false);

    Mat grayMat = new Mat();
    Imgproc.cvtColor(inputMat, grayMat, Imgproc.COLOR_BGR2GRAY);

    Mat blurMat = new Mat();
    Imgproc.blur(grayMat, blurMat, new Size(1, 1));

    Mat cannyEdges = new Mat();
    Imgproc.Canny(blurMat, cannyEdges, 50, 200);

    Mat lines = new Mat();
    Imgproc.HoughLinesP(cannyEdges, lines, 1, Math.PI / 180, 150);

    List<double[]> horizontalLines = new ArrayList<>();
    List<double[]> verticalLines = new ArrayList<>();


    for(int i = 0 ; i < lines.cols() ; i++) {
        double[] line = lines.get(0, i);
        double x1 = line[0];
        double y1 = line[1];
        double x2 = line[2];
        double y2 = line[3];

        if (Math.abs(y2 - y1) < Math.abs(x2 - x1)) {
            horizontalLines.add(line);
        } else if (Math.abs(x2 - x1) < Math.abs(y2 - y1)) {
            verticalLines.add(line);
        }
    }

所以,从技术上讲,我需要10条水平线和10条垂直线。 PS:只有数独存在,即图像中没有其他线条,只有简单的数独。请帮我解决这个问题,并非常感谢你的时间:)

0 个答案:

没有答案