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

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

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

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

在此处输入图像描述

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

 //Mat ImageMat = new Mat(); Mat ImageMat = new Mat(320, 240, CvType.CV_32F); Utils.bitmapToMat(scalen, ImageMat); 

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

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

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

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

它对我有用。