Display Keypoints on Image in Android - OpenCV

2.3k views Asked by At

I'm trying display a image with keypoints detected. In my code, i get a list of key points, my i can't display the image on screen. I think that my problem is on converting the image to bitmap from MAT. What i'm doing wrong ?

Here is my code:

    Mat teste = new Mat();
    Mat mRgba = teste.clone();
    Mat outputMat = new Mat();

    BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
    Bitmap bitmap = drawable.getBitmap();
    Utils.bitmapToMat(bitmap, teste);

    MatOfKeyPoint myKeyPoints = new MatOfKeyPoint();
    FeatureDetector orb = FeatureDetector.create(FeatureDetector.ORB);
    orb.detect(teste, myKeyPoints);

    List<KeyPoint> referenceKeypointsList =
            myKeyPoints.toList();


    Imgproc.cvtColor(teste, mRgba, Imgproc.COLOR_RGBA2RGB,4);
    Features2d.drawKeypoints(mRgba, myKeyPoints, mRgba, new Scalar(2,254,255), Features2d.DRAW_RICH_KEYPOINTS);
    Imgproc.cvtColor(mRgba, outputMat, Imgproc.COLOR_RGB2RGBA);
    Utils.matToBitmap(outputMat, bitmap);

    imageView.setImageBitmap(bitmap);
1

There are 1 answers

0
rafaoc On BEST ANSWER

Look my code. It works fine

int whichDescriptor = siftDescriptor; //freakDescriptor;

        // Features SEARCH
        int detectorType = FeatureDetector.SIFT;
        FeatureDetector detector = FeatureDetector.create(detectorType);

        Mat mask = new Mat();
        MatOfKeyPoint keypoints = new MatOfKeyPoint();
        detector.detect(image, keypoints , mask);               

        if (!detector.empty()){

            // Draw kewpoints
            Mat outputImage = new Mat();
            Scalar color = new Scalar(0, 0, 255); // BGR
            int flags = Features2d.DRAW_RICH_KEYPOINTS; // For each keypoint, the circle around keypoint with keypoint size and orientation will be drawn.
            Features2d.drawKeypoints(image, keypoints, outputImage, color , flags); 
            displayImage(Mat2BufferedImage(outputImage), "Feautures_"+detectorType);
        }

displayImage() and Mat2BufferedImage() are referenced here link1 or link2