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?