我正在尝试使用android opencv中的颜色blob检测算法检测静态图像的颜色。
我在submat()区域有问题,但我已经正确安装了opencv。得到此错误: PS:mRgba被声明为Mat
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 :(得分:0)
您需要在mRgba
之前检查null
是mRgba.submit()
。