OpenCVを使ってみよう(1.ライブラリのインポート)ではOpenCVを使用するための準備を紹介しました。
今回はいよいよOpenCVを使用して画像処理を行う方法を紹介します。
画像処理といっても色々とありますが、今回は画像処理を行うための下準備に必要なグレースケール変換を行う方法を紹介します。
詳細は以下から。
なぜグレースケールが必要か
画像処理や画像認識は色情報に精度や効果を左右されるため、できるだけ色を単純化したほうが処理が行い易くなります。
そのため、画像処理や画像認識を行う場合は、主処理を行う前にまず対象画像をグレースケール化します。
Matクラス
OpenCVでは画像の色などのデータをMatクラスで管理します。(Matクラスの詳細な情報はこちらを参照して下さい。)
Androidで使用する場合はBitmapToMatメソッドを使用してBitmapからMatクラスを生成する必要があります。
Mat mat = android.BitmapToMat([変換元のBitmapオブジェクト]);
また、MatクラスとBitmapToMatメソッドを使用するためには下記のパッケージをインポートする必要があります。
import org.opencv.android; import org.opencv.core.Mat;
Matクラスは色情報を管理していますが、画像そのものではないので、画面に表示するにはMatToBitmapメソッドを使用してBitmapに変換する必要があります。
android.MatToBitmap([変換元のMatオブジェクト],[変換先のBitmap]);
グレースケール変換を行う
では実際に画像をグレースケール変換してみましょう。
下記はSDカード直下にある”test.jpg”というファイルからBitmapを生成して、グレスケール変換を行い、ImageViewに表示するサンプルです。
Bitmap bmp = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test.jpg").copy(Bitmap.Config.ARGB_8888, true); Mat mat = android.BitmapToMat(bmp); Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY); Imgproc.cvtColor(mat, mat, Imgproc.COLOR_GRAY2RGBA, 4); android.MatToBitmap(mat, bmp); ImageView iv = (ImageView) findViewById(R.id.imageview01); iv.setImageBitmap(bmp);
5行目でcvtColorメソッドにImgproc.COLOR_RGB2GRAY定数を渡してしてカラー画像からグレー画像に変換しています。
Imgprocクラスを使用するためには下記をインポートに追加する必要があります。
import org.opencv.imgproc.Imgproc;
6行目で、グレスケール画像からRGBA画像に変換しています。
グレスケールを行ったままのMatの状態ではBitmapに変換することは不可能なため、この処理が必要になります。