2016-09-20 7 views
0

アンドロイドopencvのカラーブロブ検出のアルゴリズムを使用して静止画像の色を検出しようとしています。Android OpenCv Submat nullオブジェクト参照

私はsubmat()領域周辺に問題がありますが、opencvを正しくインストールしました。このエラーを取得: PS:mRgbaはマット

として宣言されて
java.lang.NullPointerException: Attempt to invoke virtual method 'org.opencv.core.Mat org.opencv.core.Mat.submat(org.opencv.core.Rect)' on a null object reference 
                         at com.example.backup.contour_image.MainActivity.onTouch(MainActivity.java:103) 
                         at android.view.View.dispatchTouchEvent(View.java:9406) 
                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668) 
                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2257) 
                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668) 
                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2257) 
                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668) 
                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2257) 
                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2668) 
                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2257) 

私のコード

public boolean onTouch(View v, MotionEvent event) 
{ 
    //mDetector = new ColorBlobDetector(); 
    Bitmap bm =((BitmapDrawable)iv.getDrawable()).getBitmap(); 
    Mat touchedRegionHsv = new Mat(); 
    Log.e(TAG,"Touched!"); 
    Utils.bitmapToMat(bm,touchedRegionHsv,true); 

    Scalar lower = new Scalar(22,255,255); 
    Scalar upper = new Scalar(38,100,100); 

    Rect roi = new Rect(); 

    int x = (int)event.getX(); 
    int y = (int)event.getY(); 

    roi.x = (x>4) ? x-4 : 0;       
    roi.y = (y>4) ? y-4 : 0; 

    roi.width = 8; 
    roi.height = 8; 

    Mat touchedRegionRgba = mRgba.submat(roi); //<--------------- line of error 
    Mat touchedRegionRgba_clone = touchedRegionRgba.clone(); 

    Imgproc.cvtColor(touchedRegionRgba,touchedRegionHsv,Imgproc.COLOR_RGB2HSV); 
    Core.inRange(touchedRegionHsv,lower,upper,touchedRegionRgba_clone); 

    List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 
    Mat heirarchy = new Mat(); 
    Imgproc.findContours(touchedRegionRgba_clone,contours,heirarchy,Imgproc.RETR_EXTERNAL,Imgproc.CHAIN_APPROX_NONE); 

    return false; 
} 
+0

あなたのmRgba変数はnullです:)それはどこですか? –

+0

ああ申し訳ありませんが、私はmRgbaについて言及するのを忘れていました。 mRgbaはこのメソッドの外部でpublicとして宣言されています。これはMat()です。 – Shulz

答えて

0

あなたはmRgbamRgba.submit()nullであるかどうかを確認する必要があります。

関連する問題