そもそも 色空間とは???
色を表す 数字の組み合わせであることは 違いがないが WEBをあっちこっち見てみても ARGB とかグレースケールぐらいしかなじみが無い。ところがOpenCvが対応しているパターンには ゆうに10は越える種類がある。なにがなんやら・・???
深追いは無理と判断し、テスト用の画像を準備してグレースケール変換テスト開始 !!
テスト画像
public class OpenCVnyumonActivity extends Activity { ImageView imgv; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.main); Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.colorsample); Bitmap src2 = src.copy(Bitmap.Config.ARGB_8888, true); <---(1) Mat mat = android.BitmapToMat(src2); Imgproc.cvtColor(mat , mat, Imgproc.COLOR_RGB2GRAY); Imgproc.cvtColor(mat , mat, Imgproc.COLOR_GRAY2BGRA,4); <---(2) Bitmap dsc= Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888); android.MatToBitmap(mat, dsc); imgv = (ImageView)findViewById(R.id.imageView1); imgv.setImageBitmap(dsc); } }
(1)Win7のpaintで書き込んだ画像(png)でも ARGB_8888に変換しないとBitmapToMatが正常に実行できなかった。
(2)Imgproc.cvtColorでグレースケールにした後 グレースケールからBGRに変換しないと起動してすぐActivityが終了してしまう。ただし LogCatにはなにも記録されない。
グレースケール変換結果
例のすずらんの画像をグレースケールにすると
色空間の概念を十分に理解しておかないと後で苦労するのかな?? 若干不安
参照URL
http://opencv.jp/cookbook/opencv_img.html#id3
http://geekn-nerd.blogspot.jp/2012/02/opencv-for-android.html
by Android2.2 with OpenCv 2.3.1 for Android |