Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

xfeatures2d/src/freak.cpp:337: error

I am using android studio to implement feature detection in android apps.all other function STFT SURF ORB BRISK works but not FREAK. debug message:

java.lang.RuntimeException: An error occured while executing doInBackground()
  at android.os.AsyncTask$3.done(AsyncTask.java:300)
  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
  at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
  at java.lang.Thread.run(Thread.java:841)
   Caused by: CvException [org.opencv.core.CvException: cv::Exception: ../../contrib/modules/xfeatures2d/src/freak.cpp:337: error: (-215) grayImage.channels() == 1 in function virtual void cv::xfeatures2d::FREAK_Impl::compute(cv::InputArray, std::vector<cv::KeyPoint>&, cv::OutputArray)
                                                                 ]
  at org.opencv.features2d.DescriptorExtractor.compute_0(Native Method)
  at org.opencv.features2d.DescriptorExtractor.compute(DescriptorExtractor.java:107)
  at wxh.objectdetection.MainActivity.executeTask(MainActivity.java:283)
  at wxh.objectdetection.MainActivity.access$100(MainActivity.java:53)
  at wxh.objectdetection.MainActivity$2.doInBackground(MainActivity.java:212)
  at wxh.objectdetection.MainActivity$2.doInBackground(MainActivity.java:201)
  at android.os.AsyncTask$2.call(AsyncTask.java:288)
  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                        ... 4 more

I went into app/src/jni/freak.cpp and changed line 337 from

// Convert to gray if not already
Mat grayImage = image;
CV_Assert(grayImage.channels() == 1);

to

// Convert to gray if not already
Mat grayImage = image;
//CV_Assert(grayImage.channels() == 1);
if (grayImage.channels()!=1){
    cvtColor(grayImage,grayImage,COLOR_RGBA2GRAY);
}

Still compile/run with same error, why?