2013-05-18 33 views
3

所以我做一個位圖從下一個代碼斑點:位圖來墊給出錯誤的顏色回

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

而且還給下一個輸出,這是很好的

enter image description here

然後,我做了以下操作,將位圖製作成Mat,但隨後我的顏色只是改變了...

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

我不知道爲什麼,也沒有其他方法將位圖製作成Mat。哪裏不對? enter image description here

+0

看起來藍色和紅色通道交換。你確定你的Mat將圖像存儲爲RGB(Java的默認值)而不是BGR(Opencv的默認值) –

+0

這個問題的任何更新? –

回答

8

Android中位圖的顏色通道的格式是BGR 但在OpenCV的墊,所述信道是RGB默認。所以當你做Utils.bitmapToMat()時,[B,G,R]值存儲在[R,G,B]通道中。紅色和藍色通道互換。

一個可能的解決辦法是在你有如下OpenCV的墊適用cvtcolor: Imgproc.cvtColor(ImageMat,ImageMat,Imgproc.COLOR_BGR2RGB);

它爲我工作。

+0

有趣的事實:Android.camera2 jpegs轉換爲位圖,然後轉換爲墊子保持其RGB通道的機智。 – Sipty