Mat経由で Jpegを表示する

OpenCvの使用をあきらめかけた Matを経由してJpegを表示する処理の実験です。
ここに書いたように 『BMPに読み込み』 『BMPをOpenCvのMatに変換』 そのまま 『MatからBMPに再変換』 して表示する。という簡単なプログラムです。まず一旦Matにすることで OpenCvの各種機能を利用できると考えたからです。

その1 アイコンic_launcherを表示する

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.ic_launcher);  <---(1)

        Mat mat = android.BitmapToMat(src);

        Bitmap dsc= Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888); <---(2) 
        android.MatToBitmap(mat, dsc);

        // 処理をした画像を表示する
        imgv = (ImageView)findViewById(R.id.imageView1);
        imgv.setImageBitmap(dsc);
    }
}

 実行結果 思い通り例の見慣れたアイコンが表示された。

その2 もっと大きなJpegを表示する。
以前Docomoの携帯で撮影した写真を Drawableフォルダに格納して
(1)を
 Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.suzuran);
として実行。
『予期せず停止しました』と見慣れたエラーメッセージ(苦笑)
自分的には 明らかに予期したエラー なぜならば この現象のため 
OpenCvの使用をあきらめかけたのだから・・・

今回は ここであきらめるわけには 行かない。

このエラー (2)でMatのサイズを求めているが Matのサイズが ゼロになっていることに原因がある。 どうも 自分が撮影したデータは 画像タイプに問題がありそのため BMP —> Mat 変換がうまくいってなさそうだ。例のBitmap.Config !!!
そこで一旦 Bitmap.Config.ARGB_8888でBMPをcreateし copyすることに。 
(2)を次のように変更

Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.suzuran);
Bitmap src2 = src.copy(Bitmap.Config.ARGB_8888, true);
Mat mat = android.BitmapToMat(src2);

実行結果 はじめて Mat経由でJpegの表示ができた

その3  画像をリソースから取得するのでなく SDカードから読み込むパターンのテスト
(1)部分を次のように変更
String path=Environment.getExternalStorageDirectory()+”/DCIM/100ANDRO/suzuran.jpg”;
Bitmap src = BitmapFactory.decodeFile(path);

これでも当然うまくいく。

 by Android2.2 with OpenCv 2.3.1 for Android   
スポンサーリンク
Rectangle大広告
Rectangle大広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする