2017-06-08 85 views
1

有一個可以在官方SDK中裁剪視頻幀的示例。 的主要代碼如下:使用opencv4android時,如何在打開相機時自動裁剪視頻幀

@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.The變化的方法如下:

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; 
      } 
     } 
    }; 

再有罰球顯示VAR「mPictureFileName」和「mCamera」是空的一個nullpointException。

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); 
     } 

無論如何!

感謝您的回答!

回答

0

當視圖打開時,攝像機不會啓動。因此,無法在「啓動」方法中刪除視頻。 我將這些代碼移動到「onCameraFrame」.Done!

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(); 
}