2016-12-01 12 views
0

私は画像処理のプロジェクトに取り組んでいますが、OpenCVライブラリをインポートしたところで、RGBフレームをバイナリフレームに変換しました。今私は、バイナリイメージをキャプチャしてデータベースに格納する方法を知らない。 OpenCVライブラリに関するチュートリアルはありません。だから誰も私が問題を解決するのを助けてくれるかもしれない。私のコーディングは私がやりたいことはボタンを作成し、onclickの方法で、私はイメージをキャプチャすると、画像のプレビューを表示する必要がある。..下の短い中のSOAndroidで画像を取り込む方法OpenCV

public class MainActivity extends AppCompatActivity implements View.OnTouchListener,CameraBridgeViewBase.CvCameraViewListener2 { 

private static final String TAG = MainActivity.class.getCanonicalName(); 
private CameraBridgeViewBase mOpenCvCameraView; 
private Mat mRgba; 
private Scalar mBlobColorHsv; 
private Scalar mBlobColorRgba; 

private Mat mIntermediateMat; 
private Mat mGray; 
Mat hierarchy; 


List<MatOfPoint> contours; 


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(); 
       mOpenCvCameraView.setOnTouchListener(MainActivity.this); 
      } 
      break; 
      default: { 
       super.onManagerConnected(status); 
      } 
      break; 

     } 
    } 

}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 


    mOpenCvCameraView=(CameraBridgeViewBase)findViewById(R.id.opencv_tutorial_activity_surface_view); 
    mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); 
    mOpenCvCameraView.setCvCameraViewListener(this); 
} 
@Override 
public void onPause(){ 
    super.onPause(); 
    if(mOpenCvCameraView!=null) 
     mOpenCvCameraView.disableView(); 
} 
@Override 
public void onResume(){ 
    { 
     super.onResume(); 
     if(!OpenCVLoader.initDebug()) { 
      OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_2, this, mLoaderCallback); 
     } 
     else{ 
      mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); 
     } 
    } 
} 
@Override 
public void onDestroy(){ 
    super.onPause(); 
    if(mOpenCvCameraView!=null) 
     mOpenCvCameraView.disableView(); 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 

    return false; 
} 


@Override 
public void onCameraViewStarted(int width, int height) { 
    mRgba=new Mat(); 
    mBlobColorRgba=new Scalar(255); 
    mBlobColorHsv=new Scalar(255); 
    mRgba = new Mat(height, width, CvType.CV_8UC4); 
    mIntermediateMat = new Mat(height, width, CvType.CV_8UC4); 
    mGray = new Mat(height, width, CvType.CV_8UC1); 
    hierarchy = new Mat(); 
} 

です。誰かがこの問題を解決するのを助けてください。前もって感謝します。

+0

要するに、Matをビットマップに変換したいですか? –

+0

実際にあなたは正しいと思ったが、ボタンを使って画像をキャプチャしたい。私はそれをする方法を知らない。コーディングの仕方を教えてください。どうすればいいですか? –

+0

編集した回答を投稿しました –

答えて

0

イメージをプレビューする場合は、マットをビットマップに変換してImageViewに表示する必要があります。ビットマップを受け取るようにCvCameraViewListenerを設定できます。ように

private Mat mat; 
    private boolean showPreviews; 
     private BaseLoaderCallback mLoaderCallback=new BaseLoaderCallback(this) { 
      @Override 
      public void onManagerConnected(int status) { 
       switch (status) { 
        case LoaderCallbackInterface.SUCCESS: { 
         Log.i(TAG, "OpenCV loaded successfully"); 
         someButton.setOnclickListener(new View.OnclickListener(View v){ 
           showPreviews = !showPreviews; 
}); 
         mOpenCvCameraView.enableView(); 
         mOpenCvCameraView.setOnTouchListener(MainActivity.this); 
     mOpenCvCameraView.setCvCameraViewListener(MainActivity.this); 

        } 
        break; 
        default: { 
         super.onManagerConnected(status); 
        } 
        break; 

       } 
      } 

     }; 

     @Override 
      public void onCameraViewStarted(int width, int height) { 
       // TODO Auto-generated method stub 

      } 
      @Override 
      public void onCameraViewStopped() { 
       // TODO Auto-generated method stub 

      } 
      @Override 
      public Mat onCameraFrame(CvCameraViewFrame inputFrame) { 
       // TODO Auto-generated method stub 
       if(!showPreviews) 
     mat = inputFrame.rgba(); 
      // you can return a modified mat if you want to display it in opencv 
       return mat; 
      } 
+0

はい。あなたは正しかった。しかし、私が欲しいのは、ボタン「クリックしてください」です。ボタンに触れると、画像をキャプチャして表示する必要があります。だから私はあなたが私に言ったように、私は画像をキャプチャすることができなかったし、displayPreviewメソッドも使用されなかった。私はあなたが私に提供した答えを把握しようとしていなかったので、初心者であることを不愉快にして申し訳ありません。もしあなたが気にしないなら、より具体的で私の問題を解決してください。 –

+0

私は簡単に理解できるように答えを更新しました。 –

+0

あなたのプログラムは素晴らしいです。その働き。しかし、残念ながら私は他の状況に悩まされています。より新鮮でOpenCvライブラリで作業することは、概念を理解して作業するのは難しいです。あなたがこのアプリケーションを終了し、この仕事を終了するために私を導くためにこのOpenCvライブラリで私を助けてください気にしない場合。私はこれを学びこれで働くために適切なガイダンスが必要です。あなたが自由で、私を助ける準備ができているなら、このメールID:[email protected]で私にpingしてください。あなたの指導に感謝します。 –

関連する問題