Android Java OpenCV.Проблема с обнаружением и прорисовкой линий Хафа - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь использовать OpenCV на телефоне Android для обнаружения линий. Я только начинающий, и я не совсем понимаю этот код, потому что я адаптирую его из Интернета. В конце я вижу только одну строку, а не все. Кто-нибудь может мне помочь?

    Bitmap bmp = ((BitmapDrawable)viewImage.getDrawable()).getBitmap();
    Mat grayMat = new Mat();
    Mat cannyEdges = new Mat();
    Mat lines = new Mat();
    Mat originalMat = new Mat();
    Utils.bitmapToMat(bmp, originalMat);

    //Converting the image to grayscale
    Imgproc.cvtColor(originalMat, grayMat, Imgproc.COLOR_BGR2GRAY);
    Imgproc.Canny(grayMat, cannyEdges, 10, 100);
    Imgproc.HoughLinesP(cannyEdges, lines, 1, Math.PI / 180, 50, 20, 20);

    Mat houghLines = new Mat();
    houghLines.create(cannyEdges.rows(), cannyEdges.cols(), CvType.CV_8UC1);

    //Drawing lines on the image
    for (int i = 0; i < lines.cols(); i++) {
        double[] points = lines.get(0, i);
        double x1, y1, x2, y2;
        x1 = points[0];
        y1 = points[1];
        x2 = points[2];
        y2 = points[3];
        Point pt1 = new Point(x1, y1);
        Point pt2 = new Point(x2, y2);

        //Drawing lines on an image
        Imgproc.line(houghLines, pt1, pt2, new Scalar(255, 0, 0), 1);
    }

    //Converting Mat back to Bitmap
    Utils.matToBitmap(houghLines, bmp);
    viewImage.setImageBitmap(bmp);

1 Ответ

0 голосов
/ 25 мая 2019

Вы уверены, что на выходном каноне или на вашем входе достаточно строки для обнаружения?этот код напечатает всю строку.так что я думаю, это проблема с вашими данными.

Посмотрите, сколько строк в canny выводится первым.если вызвано изменением canny, параметр canny

Utils.matToBitmap(cannyEdges, bmp);
viewImage.setImageBitmap(bmp);

Тогда, если canny может видеть много прямой линии и никакого выхода?не волнуйтесь, измените параметры Houghline

...