【问题标题】:Change Image resolution in Android with OpenCV使用 OpenCV 更改 Android 中的图像分辨率
【发布时间】:2017-04-21 16:02:05
【问题描述】:

我正在使用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;

    }
}

【问题讨论】:

    标签: opencv javacameraview


    【解决方案1】:

    如果您的 JavaCameraView 以横向显示,您可以尝试替换您的

    mOpenCvCameraView.setMaxFrameSize(720,1280);
    

    mOpenCvCameraView.setMaxFrameSize(1280,720);
    

    如果没有,请尝试在 manifest.xml 中更改活动类的方向,例如

    <activity android:name="CameraActivity"
                android:screenOrientation="landscape" />
    

    之后更改 MaxFrameSize:

    mOpenCvCameraView.setMaxFrameSize(1280,720);
    

    【讨论】:

      【解决方案2】:

      打开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);
      
      ...
      

      就我而言,它是肖像。因此,如果您想要风景,请切换它。不幸的是,这是硬编码,所以请有人加入动态解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-16
        • 1970-01-01
        相关资源
        最近更新 更多