Как нанести детектор краев Canny на изображение с помощью Opencv в Android? - PullRequest
0 голосов
/ 23 января 2019

Я создаю приложение для Android для обнаружения нескольких объектов на изображении, затем обрабатываю эти объекты и сравниваю их с эталонными объектами для обнаружения аномалий. Я тестировал разные детекторы краев изображения в python, и оператор Prewitt дал мне лучший результат, как показано ниже https://i.imgur.com/4iwOx9s.png Для андроида я использовал детектор краев Canny, но результат не так хорош, как Prewitt, как показано ниже https://i.imgur.com/C841Qup.png

Вот код Java, который я пробовал

    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.coffret);

        //compress bitmap
        bmp = getResizedBitmap(bmp, 500);

        Mat rgbMat = new Mat();
        Utils.bitmapToMat(bmp, rgbMat);


        Mat grayMat = new Mat();
        Mat bwMat = new Mat();

        Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
        Imgproc.equalizeHist(grayMat, grayMat);

        Imgproc.adaptiveThreshold(grayMat, grayMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 15, 40);
        Imgproc.Canny(grayMat, bwMat, 50, 200, 3, false);

        Utils.matToBitmap(bwMat, bmp);

        Matrix matrix = new Matrix();
        matrix.postRotate(180);

        bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);

        imgView.setImageBitmap(bmp);

Как вы можете заметить, с помощью оператора Prewitt текст становится четким, а контуры более четкими. Что я делаю не так?

...