Matmap的位图会返回错误的颜色

use*_*500 5 java android bitmap mat

所以我使用下一个代码从blob创建一个位图:

byte[] blob = contact.getMP();
ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
Bitmap scalen = Bitmap.createScaledBitmap(bitmap, 320, 240, false);
Run Code Online (Sandbox Code Playgroud)

并且它返回下一个输出,这很好

在此输入图像描述

然后我执行以下操作将位图制作成Mat,但随后我的颜色才会改变......

//Mat ImageMat = new Mat();
Mat ImageMat = new Mat(320, 240, CvType.CV_32F);
Utils.bitmapToMat(scalen, ImageMat);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,也不知道将位图变成Mat的另一种方法.怎么了? 在此输入图像描述

小智 13

Android Bitmap中的颜色通道格式为RGB 但在opencv Mat中,默认情况下通道为BGR.

因此,当您执行Utils.bitmapToMat()时,[B,G,R]值存储在[R,G,B]通道中.红色和蓝色通道互换.

一种可能的解决方案是在opencv Mat上应用cvtcolor,如下所示: Imgproc.cvtColor(ImageMat,ImageMat,Imgproc.COLOR_BGR2RGB);

它对我有用.