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 |