I\'m currently working on Android native image processing with camera/video.
I\'m using OpenCV 3.2 to capture and process image.
The problem is that I cannot
I failed to open camera inside Native code, instead I ended up using android OpenCV Camera implementation, opencv.android.CameraBridgeViewBase
.
MainActivity.java
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
private CameraBridgeViewBase mCvCamView;
Mat matInput, matOutput;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
mCvCamView.enableView();
break;
default:
super.onManagerConnected(status);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCvCamView = (CameraBridgeViewBase)findViewById(R.id.cam_view);
mCvCamView.setVisibility(SurfaceView.VISIBLE);
mCvCamView.setCvCameraViewListener(this);
mCvCamView.setCameraIndex(1); // front-camera(1), back-camera(0)
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
@Override
public void onPause()
{
super.onPause();
if (mCvCamView != null)
mCvCamView.disableView();
}
@Override
public void onResume()
{
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "onResume :: Internal OpenCV library not found.");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, this, mLoaderCallback);
} else {
Log.d(TAG, "onResume :: OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
public void onDestroy() {
super.onDestroy();
if (mCvCamView != null)
mCvCamView.disableView();
}
@Override
public void onCameraViewStarted(int width, int height) {
if ( matOutput == null || matOutput.empty() )
matOutput = new Mat(height, width, CvType.CV_8UC4, new Scalar(255, 0, 0, 255));
}
@Override
public void onCameraViewStopped() {}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
matInput = inputFrame.rgba();
Native.extract(matInput.getNativeObjAddr(), matOutput.getNativeObjAddr());
return matOutput;
}
}
activity_main.xml