2011-12-26 12 views
5

私は現在、iPhoneからAndroidに少しのレガシーコードを移行しようとしています。このコードでは、OpenCVライブラリを使用して画像処理を行っています。 そして、私はMatとAndroidビットマップクラスの間で変換を行う方法を理解できません。AndroidでOpenCVのビットマップとマットを変換する正しい方法はありますか?

このコードは、Matmapにビットマップを読み込んで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は、ビットバギーであると、私は彼らが将来のリリースでそれを修正するつもり読みました。

私は、カラー画像のためにそれを中心に働いていたどのようにそれを表示することができます。

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自体です。 –

+0

@ user1446598 AndroidでopenCVを使用していますか? – greven

+0

はい。問題は解決しました - 私は現時点で見つけることができないSOの投稿を見つけました。これは手続きを助けました。私はまだカメラで撮影した写真からresIDを取得する方法がわからないのです(描画可能なアイテムとは異なります)が、アプローチでは代わりにパス名を使用しています。 –

関連する問題