2011-12-26 63 views
5

我目前正在嘗試將一些遺留代碼從iPhone遷移到Android。此代碼使用OpenCV庫進行一些圖像處理。 而我不明白如何做Mat和Android位圖類之間的轉換。在Android上OpenCV中的位圖和Mat之間轉換的正確方法?

此代碼顯示了一個非常簡單的示例,它將一個位圖加載到Mat中,然後將其轉換回Bitmap。由此產生的圖像看起來很奇怪 - 它充滿了藍色和白色像素。原來是一個正常的PNG圖像...

Mat img = Utils.loadResource(context, resId); 
    Bitmap tmp = Bitmap.createBitmap(img.rows(), img.cols(), 
    Bitmap.Config.ARGB_8888);    
    Utils.matToBitmap(img, tmp); 

回答

13

目前matToBitmap是有點bug,我讀過他們打算在未來的版本中修復它。

我可以告訴它怎麼工作圍繞它的彩色圖像:

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); 

基本上我第一或類似的執行空間的顏色轉換你說的結果將是隨機顏色怪異的混合。

回答如果有效,我認爲是的。

+0

如何獲得'resId'?我試圖從bmp轉換一個攝像機意圖獲取的圖像到Mat,處理,然後再回來。因此所有關於bmp的信息都是路徑名和bmp本身。 – 2013-01-29 06:10:36

+0

@ user1446598您是否在Android中使用openCV? – greven 2013-02-02 02:57:31

+0

是的。問題解決了 - 我發現了一篇SO帖子,目前我找不到,這有助於程序。我仍然不知道如何從捕獲照片的照片中獲取resID(與可繪製項目不同),但是建議使用路徑名替代。 – 2013-02-09 15:09:57