2012年3月4日日曜日

OpenCVで画像を扱う際の注意点 - OpenCV for Android


序盤でハマった話を書いていなかったので、このあたりで書いておこうと思います。
Google先生に聞いても日本語のサイトは出てこないかも。

かなーりハマったのですが、OpenCV for Androidはどんな画像でもそのまますんなり処理してくれるわけではありません。
BitmapからMatへ変換してから何かの処理をするわけですが、いくつか画像を試すと読み込める画像と読み込めない画像が出てきます。

正確には、BitmapのフォーマットがARGB_8888以外の場合、Utils.bitmapToMat()の段階でサイズがゼロでチャンネルが1のMatを返すようです。
mat.empty()で調べるとtrueを返します。

当然何かの処理をしようとしても、実行エラーとなります。

そこで、Bitmapを変換する際は、以下のコードで変換を行っています。
Bitmap src = BitmapFactory.decodeResource(
  getResources(), R.drawable.resourceid);
Mat mat = Utils.bitmapToMat(src.copy(
  Config.ARGB_8888,true));

これだけの事ですが、解決するのにかなりの時間を費やしました。。

0 件のコメント:

コメントを投稿