使用OpenCV在Android中更改图像分辨率

3

我正在使用JavaCameraView和OpencCV捕获帧,但我卡在默认的620*480分辨率上,这不符合我的要求,因为我的手机可以支持1280*720分辨率。我已经尝试了很多方法,但无法改变默认的图像/帧分辨率。

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;

    }
}
2个回答

1
如果您的JavaCameraView是以横向方式呈现的,您可以尝试替换您的。
mOpenCvCameraView.setMaxFrameSize(720,1280);

mOpenCvCameraView.setMaxFrameSize(1280,720);

如果没有成功,请尝试在manifest.xml中更改您的活动类的方向。
<activity android:name="CameraActivity"
            android:screenOrientation="landscape" />

在那之后更改 MaxFrameSize:

mOpenCvCameraView.setMaxFrameSize(1280,720);

0
打开JavaCameraView.java文件,然后在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);

...

在我的情况下,它是纵向的。如果您想要横向,请切换它。不幸的是,这是硬编码,因此请有人提供动态解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接