1''
1''

Reputation: 27095

Displaying image and converting to grayscale - OpenCV for Android, Java API

I'm writing an Android app in Eclipse that uses the OpenCV4Android API. How can I display a Mat image easily, for debugging only? In C++, according to the OpenCV tutorials, you'd do something like:

namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", image ); // Show our image inside it.

but the Java API for Android doesn't seem to have a namedWindow function inside org.opencv.highgui.Highgui.

Also, I'd like to load the image as grayscale. In C++, according to imread not working in Opencv, you'd do:

imread("blackandwhite.jpg", 0);

but the Java API's Highgui.imread() has only the filename argument.

Upvotes: 3

Views: 21489

Answers (4)

treejanitor
treejanitor

Reputation: 1269

While this doesn't deal with the display of the image, here is a quick pure-java static method to read an image by filepath and then convert it (and write it) into grayscale.

/**
 * Get an OpenCV matrix from an image path and write the image as grayscale.
 * @param filePath The image path.
 * @return The matrix.
 */
public static Mat loadOpenCvImage(final String filePath) {
    Mat imgMat = Highgui.imread(filePath, Highgui.CV_LOAD_IMAGE_GRAYSCALE);
    if (imgMat == null) {
        Log.e(TAG, "error loading file: " + filePath);
    } else {
        Log.d(TAG, "Ht: " + imgMat.height() + " Width: " + imgMat.width());
        final String outPath = filePath + "_gray.jpg";
        Log.d(TAG, outPath);
        Highgui.imwrite(outPath, imgMat);
    }
    return imgMat;
}

Upvotes: 0

1''
1''

Reputation: 27095

Summary:

Convert image to grayscale: Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY);

Display image: see here and here.

Upvotes: 7

Rekha
Rekha

Reputation: 901

This is a sample code which would display an image (must have the image in drawable folder) in imageView using OpenCV:

 ImageVIew imgView = (ImageView) findViewById(R.id.sampleImageView);
        Mat mRgba = new MAt();
        mRgba = Utils.loadResource(MainAct.this, R.drawable.your_image,Highgui.CV_LOAD_IMAGE_COLOR);
        Bitmap img = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(),Bitmap.Config.ARGB_8888);
        Utils.matToBitmap(mRgba, img);
        imgView.setImageBitmap(img);

and xml must have an ImageView as below :

<ImageView
        android:id="@+id/sampleImageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"/>

Hope this helps in solving your problem..

Upvotes: 3

ArtemStorozhuk
ArtemStorozhuk

Reputation: 8725

but the Java API for Android doesn't seem to have a namedWindow function inside org.opencv.highgui.Highgui.

Because you have to show your image on View. Take a look at samples from WEB.

Also, I'd like to load the image as grayscale.

Use cvCvtColor with code CV_BGR2GRAY for such type of convertion.

Upvotes: 2

Related Questions