

カメラで写真を撮影した後、その画像に対して文字を任意の文字を入力できるアプリを制作しています。

方法としては以下の手順で考えています。

  * AndroidStudioで制作したカメラアプリを起動し撮影、画像データを取得。
  * その画像データをopencvに読み込み画像に文字の挿入。

現在はカメラアプリの制作まで終了していてここからどのようにしてopencvに撮った画像データを取り込むかわかりません。

どなたか教えていただけませんでしょうか。

よろしくお願い致します。

カメラアプリのソースコード

[code]

        import android.app.Activity;
        import android.content.Intent;
        import android.graphics.Bitmap;
        import android.os.Bundle;
        import android.provider.MediaStore;
        import android.view.View;
        import android.view.View.OnClickListener;
        import android.widget.Button;
        import android.widget.ImageView;
    
        public class MainActivity extends Activity {
    
        static final int REQUEST_CAPTURE_IMAGE = 100;
    
        Button button1;
        ImageView imageView1;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            findViews();
            setListeners();
        }
    
        protected void findViews(){
            button1 = (Button)findViewById(R.id.button1);
            imageView1 = (ImageView)findViewById(R.id.imageView1);
        }
    
        protected void setListeners(){
            button1.setOnClickListener(new OnClickListener(){
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(
                            MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(
                            intent,
                            REQUEST_CAPTURE_IMAGE);
                }
            });
        }
    
        @Override
        protected void onActivityResult(
                int requestCode,
                int resultCode,
                Intent data) {
            if(REQUEST_CAPTURE_IMAGE == requestCode
                    && resultCode == Activity.RESULT_OK ){
                Bitmap capturedImage =
                        (Bitmap) data.getExtras().get("data");
                imageView1.setImageBitmap(capturedImage);
            }
        }
    
    }
    
[/code]


CC BY-SA 4.0
2018-01-01T06:25:15.347
40654
2023-10-23T08:05:10.607
2021-04-15T04:08:45.893
3060
26848
question
java android opencv
カメラアプリの画像データをOpenCVに読み込む方法


AndroidでOpenCVを開発する環境は整っていますでしょうか。  
まだの場合は公式からopencvのダウンロードとライブラリの設定をしてください。  
簡単なopencvでのキャプチャなら自分のプロジェクトを作成し、AndroidManifest.xml内に

[code]

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera2" android:required="false"/>
    <uses-feature android:name="android.hardware.camera2.autofocus" android:required="false"/>
    
[/code]

を追加して、layoutに

[code]

     <org.opencv.android.JavaCameraView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="gone"
        android:id="@+id/tutorial1_activity_java_surface_view"
        opencv:show_fps="true"
        opencv:camera_id="any" />
    
[/code]

を追加して、メインに

[code]

    import org.opencv.android.BaseLoaderCallback;
    import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
    import org.opencv.android.LoaderCallbackInterface;
    import org.opencv.android.OpenCVLoader;
    import org.opencv.core.Mat;
    import org.opencv.android.CameraBridgeViewBase;
    import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.SurfaceView;
    import android.view.WindowManager;
    import android.widget.Toast;
     
    public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener {
        private static final String TAG = "OCVSample::Activity";
     
        private CameraBridgeViewBase mOpenCvCameraView;
        private boolean              mIsJavaCamera = true;
        private MenuItem             mItemSwitchCamera = null;
     
        private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
            @Override
            public void onManagerConnected(int status) {
                switch (status) {
                    case LoaderCallbackInterface.SUCCESS:
                    {
                        Log.i(TAG, "OpenCV loaded successfully");
                        mOpenCvCameraView.enableView();
                    } break;
                    default:
                    {
                        super.onManagerConnected(status);
                    } break;
                }
            }
        };
     
        public MainActivity() {
            Log.i(TAG, "Instantiated new " + this.getClass());
        }
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            Log.i(TAG, "called onCreate");
            super.onCreate(savedInstanceState);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
     
            setContentView(R.layout.activity_main);
     
            mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view);
     
            mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
     
            mOpenCvCameraView.setCvCameraViewListener(this);
        }
     
        @Override
        public void onPause()
        {
            super.onPause();
            if (mOpenCvCameraView != null)
                mOpenCvCameraView.disableView();
        }
     
        @Override
        public void onResume()
        {
            super.onResume();
            if (!OpenCVLoader.initDebug()) {
                Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
                OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
            } else {
                Log.d(TAG, "OpenCV library found inside package. Using it!");
                mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
            }
        }
     
        public void onDestroy() {
            super.onDestroy();
            if (mOpenCvCameraView != null)
                mOpenCvCameraView.disableView();
        }
     
        public void onCameraViewStarted(int width, int height) {
        }
     
        public void onCameraViewStopped() {
        }
     
        public Mat onCameraFrame(Mat inputFrame) {
            return inputFrame;
        }
    }
    
[/code]

をして実行してみてください。  
build.grableとかmainにエラーが出るとは思いますが自分の環境に合わせてください。  
ちなみに自分のコードはOpenCV 3.2のものです。


CC BY-SA 4.0
2018-01-08T12:00:52.420
40817
2021-04-15T04:10:12.367
2021-04-15T04:10:12.367
3060
26893
40654
answer