Ask Your Question

Revision history [back]

How I detect marker using OpenCV for android

hi, baru-baru ini saya belajar opencv untuk android untuk membuat aplikasi augmented reality berbasis marker, saya menemukan buku Android Application Programming with OpenCV 3 dan ada kasus dimana aplikasi berhasil mencari gambar dan menggambar garis hijau pada gambar. namun ketika saya mencoba menggunakan marker seperti dibawah ini, aplikasi tidak berhasil menemukan gambar (tidak menggambar garis hijau), bagaimana caranya agar aplikasi dapat menemukan gambar penanda tersebut ? here's the code :

public ImageDetectionFilter(final Context context,
        final int referenceImageResourceID) throws IOException {

    // Load the reference image from the app's resources.
    // It is loaded in BGR (blue, green, red) format.
    mReferenceImage = Utils.loadResource(context,
            referenceImageResourceID,
            Imgcodecs.CV_LOAD_IMAGE_COLOR);

    // Create grayscale and RGBA versions of the reference image.
    final Mat referenceImageGray = new Mat();
    Imgproc.cvtColor(mReferenceImage, referenceImageGray,
            Imgproc.COLOR_BGR2GRAY);
    Imgproc.cvtColor(mReferenceImage, mReferenceImage,
            Imgproc.COLOR_BGR2RGBA);

    // Store the reference image's corner coordinates, in pixels.
    mReferenceCorners.put(0, 0,
            new double[] {0.0, 0.0});
    mReferenceCorners.put(1, 0,
            new double[] {referenceImageGray.cols(), 0.0});
    mReferenceCorners.put(2, 0,
            new double[] {referenceImageGray.cols(),
                    referenceImageGray.rows()});
    mReferenceCorners.put(3, 0,
            new double[] {0.0, referenceImageGray.rows()});

    // Detect the reference features and compute their
    // descriptors.
    mFeatureDetector.detect(referenceImageGray,
            mReferenceKeypoints);
    mDescriptorExtractor.compute(referenceImageGray,
            mReferenceKeypoints, mReferenceDescriptors);
}

@Override
public void apply(final Mat src, final Mat dst) {

    // Convert the scene to grayscale.
    Imgproc.cvtColor(src, mGraySrc, Imgproc.COLOR_RGBA2GRAY);

    // Detect the scene features, compute their descriptors,
    // and match the scene descriptors to reference descriptors.
    mFeatureDetector.detect(mGraySrc, mSceneKeypoints);
    mDescriptorExtractor.compute(mGraySrc, mSceneKeypoints,
            mSceneDescriptors);
    mDescriptorMatcher.match(mSceneDescriptors,
            mReferenceDescriptors, mMatches);

    // Attempt to find the target image's corners in the scene.
    findSceneCorners();

    // If the corners have been found, draw an outline around the
    // target image.
    // Else, draw a thumbnail of the target image.
    draw(src, dst);
}

the full source code can be downloaded from here : here

How I detect marker using OpenCV for android

hi, baru-baru ini saya belajar opencv untuk recently I learned OpenCV for android untuk membuat aplikasi to make the marker-based augmented reality berbasis marker, saya menemukan buku applications, I found the book Android Application Programming with OpenCV 3 dan ada kasus dimana aplikasi berhasil mencari gambar dan menggambar garis hijau pada gambar. namun ketika saya mencoba menggunakan marker seperti dibawah ini, aplikasi tidak berhasil menemukan gambar (tidak menggambar garis hijau), bagaimana caranya agar aplikasi dapat menemukan gambar penanda tersebut ? and there are cases where the application successfully seek green image and draw lines on the image. but when I tried to use markers like this, the application failed to find an image (not drawing a green line), how do I get an application can find pictures of the markers? here's the code :

public ImageDetectionFilter(final Context context,
        final int referenceImageResourceID) throws IOException {

    // Load the reference image from the app's resources.
    // It is loaded in BGR (blue, green, red) format.
    mReferenceImage = Utils.loadResource(context,
            referenceImageResourceID,
            Imgcodecs.CV_LOAD_IMAGE_COLOR);

    // Create grayscale and RGBA versions of the reference image.
    final Mat referenceImageGray = new Mat();
    Imgproc.cvtColor(mReferenceImage, referenceImageGray,
            Imgproc.COLOR_BGR2GRAY);
    Imgproc.cvtColor(mReferenceImage, mReferenceImage,
            Imgproc.COLOR_BGR2RGBA);

    // Store the reference image's corner coordinates, in pixels.
    mReferenceCorners.put(0, 0,
            new double[] {0.0, 0.0});
    mReferenceCorners.put(1, 0,
            new double[] {referenceImageGray.cols(), 0.0});
    mReferenceCorners.put(2, 0,
            new double[] {referenceImageGray.cols(),
                    referenceImageGray.rows()});
    mReferenceCorners.put(3, 0,
            new double[] {0.0, referenceImageGray.rows()});

    // Detect the reference features and compute their
    // descriptors.
    mFeatureDetector.detect(referenceImageGray,
            mReferenceKeypoints);
    mDescriptorExtractor.compute(referenceImageGray,
            mReferenceKeypoints, mReferenceDescriptors);
}

@Override
public void apply(final Mat src, final Mat dst) {

    // Convert the scene to grayscale.
    Imgproc.cvtColor(src, mGraySrc, Imgproc.COLOR_RGBA2GRAY);

    // Detect the scene features, compute their descriptors,
    // and match the scene descriptors to reference descriptors.
    mFeatureDetector.detect(mGraySrc, mSceneKeypoints);
    mDescriptorExtractor.compute(mGraySrc, mSceneKeypoints,
            mSceneDescriptors);
    mDescriptorMatcher.match(mSceneDescriptors,
            mReferenceDescriptors, mMatches);

    // Attempt to find the target image's corners in the scene.
    findSceneCorners();

    // If the corners have been found, draw an outline around the
    // target image.
    // Else, draw a thumbnail of the target image.
    draw(src, dst);
}

the full source code can be downloaded from here : here

How I detect marker using OpenCV for android

hi, recently I learned OpenCV for android to make the marker-based augmented reality applications, I found the book Android Application Programming with OpenCV 3 and there are cases where the application successfully seek green image and draw lines on the image. but when I tried to use markers like this, image description the application failed to find an image (not drawing a green line), how do I get an application can find pictures of the markers? here's the code :

public ImageDetectionFilter(final Context context,
        final int referenceImageResourceID) throws IOException {

    // Load the reference image from the app's resources.
    // It is loaded in BGR (blue, green, red) format.
    mReferenceImage = Utils.loadResource(context,
            referenceImageResourceID,
            Imgcodecs.CV_LOAD_IMAGE_COLOR);

    // Create grayscale and RGBA versions of the reference image.
    final Mat referenceImageGray = new Mat();
    Imgproc.cvtColor(mReferenceImage, referenceImageGray,
            Imgproc.COLOR_BGR2GRAY);
    Imgproc.cvtColor(mReferenceImage, mReferenceImage,
            Imgproc.COLOR_BGR2RGBA);

    // Store the reference image's corner coordinates, in pixels.
    mReferenceCorners.put(0, 0,
            new double[] {0.0, 0.0});
    mReferenceCorners.put(1, 0,
            new double[] {referenceImageGray.cols(), 0.0});
    mReferenceCorners.put(2, 0,
            new double[] {referenceImageGray.cols(),
                    referenceImageGray.rows()});
    mReferenceCorners.put(3, 0,
            new double[] {0.0, referenceImageGray.rows()});

    // Detect the reference features and compute their
    // descriptors.
    mFeatureDetector.detect(referenceImageGray,
            mReferenceKeypoints);
    mDescriptorExtractor.compute(referenceImageGray,
            mReferenceKeypoints, mReferenceDescriptors);
}

@Override
public void apply(final Mat src, final Mat dst) {

    // Convert the scene to grayscale.
    Imgproc.cvtColor(src, mGraySrc, Imgproc.COLOR_RGBA2GRAY);

    // Detect the scene features, compute their descriptors,
    // and match the scene descriptors to reference descriptors.
    mFeatureDetector.detect(mGraySrc, mSceneKeypoints);
    mDescriptorExtractor.compute(mGraySrc, mSceneKeypoints,
            mSceneDescriptors);
    mDescriptorMatcher.match(mSceneDescriptors,
            mReferenceDescriptors, mMatches);

    // Attempt to find the target image's corners in the scene.
    findSceneCorners();

    // If the corners have been found, draw an outline around the
    // target image.
    // Else, draw a thumbnail of the target image.
    draw(src, dst);
}

the full source code can be downloaded from here : here