2017-03-29 13 views
0

私はいくつかの画像処理ジョブを行いたいと思います。写真を撮った後ではなく、プレビュー状態でカメラからリアルタイムの画像データを取得したいと思います。Android - Real-Timeはカメラから画像データを取得しますか?

私はこのpostを見ましたが、この使用方法はわかりません。これを設定した後

SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() 
{ 
    public void surfaceCreated(SurfaceHolder holder) { 
     camera.setPreviewCallback(previewCallback); 
    } 
} 

この

private Camera.PreviewCallback previewCallback= new Camera.PreviewCallback() 
{ 
    @Override 
    public void onPreviewFrame(byte[] data,Camera cam) 
    { 
      Camera.Size previewSize = cam.getParameters().getPreviewSize(); 
      YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21,previewSize.width,previewSize.height, null); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      yuvImage.compressToJpeg(new Rect(0,0,previewSize.width,previewSize.height),80,baos); 
      byte[] jdata = baos.toByteArray(); 
      Bitmap bitmap = BitmapFactory.decodeByteArray(jdata,0,jdata.length);  
    } 
}; 

どのように私はリアルタイムの私の画像データを得ることができますか?誰も私に短いサンプルコードを教えてください。

ありがとうございます。

+0

これは既にリアルタイムです。ではない、? – greenapps

+0

http://stackoverflow.com/q/3376672/1066839 – John

+0

@greenapps Ahh、私はそれの中に自分のコードを置くことが必要だとわかった。 –

答えて

2

OpenCVライブラリで使用できる画像処理ベースの操作です。 ここで私は与えられたサンプルコードは、このコードは、カメラの許可をOpenCVのが適切にインポートチェックしたりせず、小切手OpenCVの

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 

import org.opencv.android.BaseLoaderCallback; 
import org.opencv.android.CameraBridgeViewBase; 
import org.opencv.android.JavaCameraView; 
import org.opencv.android.LoaderCallbackInterface; 
import org.opencv.android.OpenCVLoader; 
import org.opencv.core.Mat; 

import static org.opencv.core.CvType.CV_8UC1; 

public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 { 

    private static final String TAG = "MainActivity"; 
    JavaCameraView javaCameraView; 
    Mat frame; 
    public static final int CAMERA_PERMISSION_REQUEST_CODE = 3; 

    static { 
     System.loadLibrary("MyOpenCVLibs"); 
    } 

    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { 
     @Override 
     public void onManagerConnected(int status) { 
      switch(status){ 
       case LoaderCallbackInterface.SUCCESS: 
       { 
        javaCameraView.enableView(); 
       } break; 
       default: 
       { 
        super.onManagerConnected(status); 
       } break; 
      } 
     } 
    }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED) { 
       ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},CAMERA_PERMISSION_REQUEST_CODE); 
     } 

     javaCameraView = (JavaCameraView) findViewById(R.id.java_camera_view); 
     javaCameraView.setVisibility(View.VISIBLE); 
     javaCameraView.setCvCameraViewListener(this); 
    } 

    @Override 
    protected void onPause(){ 
     super.onPause(); 
     if(javaCameraView!=null) 
      javaCameraView.disableView(); 
    } 

    @Override 
    protected void onDestroy(){ 
     super.onDestroy(); 
     if(javaCameraView!=null) 
      javaCameraView.disableView(); 
    } 

    @Override 
    protected void onResume(){ 

     super.onResume(); 
     if (OpenCVLoader.initDebug()) { 
      Log.i(TAG, "OpenCV loaded successfully."); 
      mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); 
     } else { 
      Log.i(TAG, "OpenCV not loaded."); 
      OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0, this, mLoaderCallback); 
     } 
    } 

    @Override 
    public void onCameraViewStarted(int width, int height) { 
     frame=new Mat(height,width,CV_8UC4); 

    } 

    @Override 
    public void onCameraViewStopped() { 
     frame.release(); 
    } 

    @Override 
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { 
     frame=inputFrame.rgba(); 

    } 
} 
  • 使ってカメラから直接フレームを処理します。
  • 各入力フレームはフレーム変数に保存されます。
関連する問題