Reputation: 95
I am capturing frames using JavaCameraView
and OpencCV, but i am stuck at default 620*480 resolution, which is not my requirement my phone can support 1280*720 resolution, I have been trying to find the solution for many days, tried many options but could not alter default image/frame resolution.
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i("OpenCv", "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
@Override
public void onResume()
{
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d("OpenCv", "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_11, this, mLoaderCallback);
} else {
Log.d("OpenCv", "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view);
mOpenCvCameraView.setMaxFrameSize(720,1280);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this);
}
@Override
public void onCameraViewStarted(int width, int height) {
// Recieve Image Data when the caera preview starts
mRgba = new Mat(height, width, CvType.CV_8UC4);
mRgbaT = new Mat(height, width, CvType.CV_8UC4);
mRgbaF = new Mat(height, width, CvType.CV_8UC4);
//End
mSpectrum = new Mat();
mBlobColorRgba = new Scalar(255);
mBlobColorHsv = new Scalar(255);
SPECTRUM_SIZE = new Size(400, 400);
CONTOUR_COLOR = new Scalar(255,0,0,255);
}
@Override
public void onCameraViewStopped() {
mRgba.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
timeofFrame = System.currentTimeMillis();
mRgba = inputFrame.rgba();
Core.transpose(mRgba,mRgbaT);
//Rotate 90 degrees//
Imgproc.resize(mRgbaT,mRgbaF,mRgbaF.size(),0,0,0);
Core.flip(mRgbaF,mRgba,1);
return mRgba;
}
}
Upvotes: 3
Views: 2741
Reputation: 83
Open JavaCameraView.java, then manually set the width and height inside InitializeCamera():
...
/* Now set camera parameters */
try {
Camera.Parameters params = mCamera.getParameters();
Log.d(TAG, "getSupportedPreviewSizes()");
List<android.hardware.Camera.Size> sizes = params.getSupportedPreviewSizes();
if (sizes != null) {
/* Select the size that fits surface considering maximum size allowed */
width = 1080;
height = 1920;
Size frameSize = calculateCameraFrameSize(sizes, new JavaCameraSizeAccessor(), width, height);
...
In my case, it's portrait. So switch it up if you want landscape. Unfortunately this is hardcoding, so please someone chime in for a dynamic solution.
Upvotes: 0
Reputation: 194
If your JavaCameraView is presented in landscape you can try replace your
mOpenCvCameraView.setMaxFrameSize(720,1280);
to
mOpenCvCameraView.setMaxFrameSize(1280,720);
If not, try to change orientation of your activity class in manifest.xml like
<activity android:name="CameraActivity"
android:screenOrientation="landscape" />
after that change MaxFrameSize:
mOpenCvCameraView.setMaxFrameSize(1280,720);
Upvotes: 1