2017-12-04 9 views
0

私はOpenCVを使って新しく、Canny検出器を適用しようとするとアプリケーションがクラッシュします。私は同じことについて別の投稿を見ましたが、私はそれを試して何もしなかった...AndroidアプリでOpencv cannyエッジ検出がクラッシュする

私はAndroidスタジオ3.0、OpenCV 3.2.0を使用し、私の携帯電話はAndroid 6.0.1です。

これは私のコードです。私はたくさんの組み合わせを試して、Canny検出器を適用しようとすると常に失敗します。最後の方法で注意を払ってくださいonCameraFrame ...それはキャニーでRGBAとグレー画像の両方で完璧に動作しますが、ありません:それは、画像をキャッチしにそれを保存することが可能です場合

public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2{ 


    private static String TAG = "MainActivity"; 
    JavaCameraView javaCameraView; 
    Mat mRgba, imgGray, imgCanny, wide; 
    BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { 
     @Override 
     public void onManagerConnected(int status){ 
      switch(status){ 
       case BaseLoaderCallback.SUCCESS:{ 
        javaCameraView.enableView(); 
        break; 
       } 
       default:{ 
        super.onManagerConnected(status); 
        break; 
       } 
      } 
     } 
    }; 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     javaCameraView = (JavaCameraView) findViewById(R.id.java_camera_view); 
     javaCameraView.setVisibility(SurfaceView.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 succesfully"); 
      mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); 
     } else { 
      Log.i(TAG, "Opencv not loaded"); 
      OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, this, mLoaderCallback); 
     } 
    } 


    @Override 
    public void onCameraViewStarted(int width, int height) { 
     mRgba = new Mat (height, width, CvType.CV_8UC4); 
     imgGray = new Mat (height, width, CvType.CV_8UC1); 
     imgCanny = new Mat (height, width, CvType.CV_8UC1); 
    } 

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

    @Override 
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { 
     imgGray = inputFrame.gray(); 
     //mRgba = inputFrame.rgba(); 

     //Imgproc.cvtColor(mRgba, imgGray, Imgproc.COLOR_RGB2GRAY); 
     Imgproc.Canny(imgGray, imgCanny, 50, 150); //detector canny 

     return imgCanny; 
    } 

} 

は私も知りたいですギャラリー。おそらくonTouchメソッドを使っていますか?どうもありがとうございました!

+0

エラーメッセージはありますか? – Bhoke

答えて

0

私はCanny Edge検出のためにOpenCV v3.1のみが機能しました。上位バージョン(v3.4)に問題がありました。お役に立てれば!

関連する問題