简体   繁体   中英

How to capture a image in Android OpenCV

I am working in a project of Image processing and now I have one issue where I imported the OpenCV library I converted the RGB frame to binary frame. Now I dont know how to capture the binary image and store it in database. There is no tutorial available regarding the OpenCV library. So could any one please help me to solve the issue. My coding is below..

public class MainActivity extends AppCompatActivity implements View.OnTouchListener,CameraBridgeViewBase.CvCameraViewListener2 {

private static final String TAG = MainActivity.class.getCanonicalName();
private CameraBridgeViewBase mOpenCvCameraView;
private Mat mRgba;
private Scalar mBlobColorHsv;
private Scalar mBlobColorRgba;

private Mat mIntermediateMat;
private Mat mGray;
Mat hierarchy;


List<MatOfPoint> contours;


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();
                mOpenCvCameraView.setOnTouchListener(MainActivity.this);
            }
            break;
            default: {
                super.onManagerConnected(status);
            }
            break;

        }
    }

};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


    mOpenCvCameraView=(CameraBridgeViewBase)findViewById(R.id.opencv_tutorial_activity_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()) {
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_2, this, mLoaderCallback);
        }
        else{
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }
}
@Override
public void onDestroy(){
    super.onPause();
    if(mOpenCvCameraView!=null)
        mOpenCvCameraView.disableView();
}

@Override
public boolean onTouch(View v, MotionEvent event) {

    return false;
}


@Override
public void onCameraViewStarted(int width, int height) {
    mRgba=new Mat();
    mBlobColorRgba=new Scalar(255);
    mBlobColorHsv=new Scalar(255);
    mRgba = new Mat(height, width, CvType.CV_8UC4);
    mIntermediateMat = new Mat(height, width, CvType.CV_8UC4);
    mGray = new Mat(height, width, CvType.CV_8UC1);
    hierarchy = new Mat();
}

So in short what I want to do is create a button and in onclick method I want to capture the image and preview of the image has to be displayed. Please someone help me to resolve this issue. Thanks in advance.

if you want to preview the image then you have to convert the mat to a bitmap and then display it in an ImageView. You can set a CvCameraViewListener to receive the bitmap. Like so

    private Mat mat;
    private boolean showPreviews;
        private BaseLoaderCallback mLoaderCallback=new BaseLoaderCallback(this) {
            @Override
            public void onManagerConnected(int status) {
                switch (status) {
                    case LoaderCallbackInterface.SUCCESS: {
                        Log.i(TAG, "OpenCV loaded successfully");
                      someButton.setOnclickListener(new View.OnclickListener(View v){
                               showPreviews = !showPreviews;
});
                        mOpenCvCameraView.enableView();
                        mOpenCvCameraView.setOnTouchListener(MainActivity.this);
        mOpenCvCameraView.setCvCameraViewListener(MainActivity.this);

                    }
                    break;
                    default: {
                        super.onManagerConnected(status);
                    }
                    break;

                }
            }

        };

        @Override
            public void onCameraViewStarted(int width, int height) {
                // TODO Auto-generated method stub

            }
            @Override
            public void onCameraViewStopped() {
                // TODO Auto-generated method stub

            }
            @Override
            public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
                // TODO Auto-generated method stub
               if(!showPreviews)
      mat = inputFrame.rgba();
           // you can return a modified mat if you want to display it in opencv
                return mat;
            }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM