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);
它对我有用。