2017年2月5日日曜日

Tutorial1Activityで画像処理を行うための編集1

Tutorial1Activityを編集し、細かい画像処理が可能な形に変更します。

画面左のProjectタブからAndroid タブを選択し、OpenCVTutorial1CameraPreview→java→org.opencv.tutorial1→Tutorial1Activityを開きます。


このとき、前回でOpenCV Managerを使用しない設定にしている人は、 onCreateメソッドの先頭に以下の文を加えます。

System.loadLibrary("opencv_java3");

次に、97行目付近のonCameraFrameメソッドを編集します。
編集前は以下のようになっています。

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
        return inputFrame.rgba();
}

このメソッドはプレビューで表示される画像を返すメソッドで、inputFrameを受け取り、それをMat形式に変換したデータをreturnしています。
よって、inputFrameで得られたデータを画像処理し、最終的にMat形式に変換してあげることで、画像処理したプレビューが見られるようになります。
今回は、onCameraFrameメソッドを以下のように編集します。

    public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
        Mat mat=inputFrame.rgba();//①
        inputFrame=null;

        double resize=0.5;//②
        if(resize!=1){
            Imgproc.resize(mat, mat, new Size(),resize,resize, Imgproc.INTER_AREA);//③
        }


        if(resize!=1){
            Imgproc.resize(mat, mat, new Size(),1/resize, 1/resize, Imgproc.INTER_CUBIC);//④
        }
        return mat;//⑤
    }

①ではinputFrameをmat形式に変換します。②では画像処理するにあたり、リサイズして処理するか、そしてリサイズする倍率を指定しています。これは、プレビュー画像が大きいときに、そのままのサイズで画像処理を行うと非常に時間がかかってしまうことがあるためです。そのため、一度二分の一のサイズなどにリサイズしてから画像処理し、またリサイズしなおして表示するという流れが必要になる場合があります。このリサイズ倍率は実機でのプレビューサイズに応じて変える必要があります。目安として横幅が1920や1440の場合は0.5を、720や640の場合は1でリサイズしないほうがよいでしょう。なお、倍率の小数点以下が0.33など1を割り切れない値の場合、エラーが発生する恐れがあります。
③では縮小リサイズ処理を、④では拡大リサイズ処理を行っています。このときImgprocとSizeでクラスをインポートする必要があります。その際はImgprocやSizeにカーソルを当ててからAlt+Enterを押し、Import Classを選びましょう。また、Sizeでクラスをインポートするときは複数の選択肢が出ますが、org.opencv.coreを選びましょう。
 ⑤ではリサイズ処理したmatを返します。このmatが画像として実機のディスプレイに表示されます。

この時点で実機で実行し、エラーが発生しないことを確認しましょう。
下に実行結果の図を載せますが、気持ち若干のぼやけが生じます。




0 件のコメント:

コメントを投稿