【问题标题】:Using opencv4android,how to cut out video frame automatically when the camera is opened使用opencv android,如何在打开相机时自动剪切视频帧
【发布时间】:2017-06-09 10:56:37
【问题描述】:

官方SDK中有一个可以截取视频帧的示例。 主要代码如下:

@SuppressLint("SimpleDateFormat")
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.i(TAG,"onTouch event");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
        String currentDateandTime = sdf.format(new Date());
        String fileName = Environment.getExternalStorageDirectory().getPath() +
                               "/sample_picture_" + currentDateandTime + ".jpg";
        mOpenCvCameraView.takePicture(fileName);
        Toast.makeText(this, fileName + " saved", Toast.LENGTH_SHORT).show();
        return false;
    }

现在我想把它改成一个可以自动剪掉视频帧的样本。我已经评论了上面的代码并更改了名为 onManagerConnected.变化如下:

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();
                    String filename = Environment.getExternalStorageDirectory().getPath()+"test"+".jpg";
                    mOpenCvCameraView.takePicture(filename);
                    Log.i(TAG, filename);
//                  mOpenCvCameraView.setOnTouchListener(Tutorial3Activity.this);
                } break;
                default:
                {
                    super.onManagerConnected(status);
                } break;
            }
        }
    };

然后抛出一个 nullpointException,显示 var "mPictureFileName" 和 "mCamera" 为 null。

 public void takePicture(final String fileName) {
            Log.i(TAG, "Taking picture");
            mPictureFileName = fileName;
            // Postview and jpeg are sent in the same buffers if the queue is not empty when performing a capture.
            // Clear up buffers to avoid mCamera.takePicture to be stuck because of a memory issue
            mCamera.setPreviewCallback(null);

            // PictureCallback is implemented by the current class
            mCamera.takePicture(null, null, this);
        }

不管怎样!

感谢您的回答!

【问题讨论】:

    标签: opencv4android


    【解决方案1】:

    当视图打开时,相机没有启动。因此您不能在“启动”方法中剪切视频。 我将这些代码移至方法“onCameraFrame”。完成!

    public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
        String filename = null;
        filename = Environment.getExternalStorageDirectory().getPath()+"/test"+i+".jpg";
        mOpenCvCameraView.takePicture(filename);
        Log.d("camera", filename);
        return inputFrame.rgba();
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      相关资源
      最近更新 更多