Reputation: 4403
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);
Upvotes: 5
Views: 13984
Reputation: 643
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.
Upvotes: 14