カメラ画面はOpenCV-androidを使ってみます。
表示する画像は2Dの初音ミクさん。
まあ、一種のプリクラをやってみようというわけです。
今回はその初段。
こんな感じです。
今回はアンドロイド用のOpenCVは2.3.1を使ってみます。
カメラ画面のみのスナップショットの撮り方のコードは以下のページを参照してください。
アンドロイドでOpenCV(お顔の検出)
今回のロジックでは、カメラ画面のスナップショットを保存する前に、カメラ画面とミクさんの画像を合成しておきます。
ミクさんの画像は背景を透過したpng画像を用意し、プロジェクトのres/drawableフォルダーに入れておきます。
コードは
アンドロイドでOpenCV(お顔の検出)
に記述しておいたものを使いますが、変更点は以下の部分。
1:起動画面でミクさんを表示するため、メインActivity(FdActivity.java)にImageViewを用意し、
ここにミクさんをセットしておきます。
今回はImageViewを使っていますが、次バージョンでは変更する予定です。
また、メニュにスナップショットを用意しておきます。FdView内の関数を呼ぶので以下のような感じ。
private FdView fdv;
private void take_photo(){
fdv.get_cvPicture();
}
2:FdView.javaのfor (Rect r : faces)内のコードは外しておきます。
ここに書かれているのは、ニコちゃんマークを表示するためのものなので今回は不要。
3:FdView.javaのget_cvPicture()関数に以下のコードを追加。
これはカメラ画面のBitmapにミクさん画像のBitmapをCanvasを使って合成するコードです。
Resources r = getResources();
Bitmap bmp_miku = BitmapFactory.decodeResource(r, R.drawable.miku);
Bitmap newBitmap = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(),Bitmap.Config.ARGB_8888);
bitmapCanvas = new Canvas(newBitmap);
bitmapCanvas.drawBitmap(bmp,0, 0, null);
bitmapCanvas.drawBitmap(bmp_miku,0, 100, null);//合成
write_cvPicture()関数のBitmapの引数には合成用に作成したnewBitmapを与えます。
write_cvPicture(filePath4Picture, newBitmap);
以上です。
こんな感じ。Pictureメニュでfdv.get_cvPicture()関数を呼びます。
アンドロイドでOpenCV(お顔の検出)
のコードにあるように、合成画像はSDカードのDCIM/Camera/example.jpgに保存されます。
Under construction