Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Correct way to convert between Bitmap and Mat in OpenCV on Android?

I'm currently trying to migrate a bit of legacy code from iPhone to Android. This code uses the OpenCV library to do some image processing. And I cannot understand how to do the conversion between Mat and Android Bitmap classes.

This code shows a very simplified example which loads a bitmap into a Mat, then converts it back to Bitmap. The resulting image looks weird - it's filled with blue and white pixels. And the original is a normal PNG image...

  Mat img = Utils.loadResource(context, resId);
  Bitmap tmp = Bitmap.createBitmap(img.rows(), img.cols(),  
  Bitmap.Config.ARGB_8888);               
  Utils.matToBitmap(img, tmp);
like image 920
Anton Avatar asked Dec 26 '11 16:12

Anton


1 Answers

Currently matToBitmap is a bit buggy, I've read they intend to fix it in a future release.

I can show it how I worked around it for a color image:

mMat = Utils.loadResource(this, resId, Highgui.CV_LOAD_IMAGE_COLOR);
Imgproc.cvtColor(mMat, result, Imgproc.COLOR_RGB2BGRA);
bmp = Bitmap.createBitmap(result.cols(), result.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(result, bmp);
mImageView.setImageBitmap(bmp);

Basically i perform that space color conversion first or like you said the result will be a weird blend of random colors.

Answer if it works, I think it does.

like image 94
greven Avatar answered Sep 26 '22 01:09

greven