カメラ画面は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