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;
}