0
我有一個本機部分的Android應用程序。它將使用svm,所以我需要BOWImgDescriptorExtractor。我的問題是我不能在PC上使用bowDE.compute();
。這裏是Android沒有實現這個論點:bowDe.compute(Mat& img, vector<KeyPoint>& keypoints, Mat& descriptors);
如何在Android NDK中使用OpenCV BOWImgDescriptorExtractor?
我必須使用以下方法:
void compute(const cv::Mat &, std::vector<cv::KeyPoint,std::allocator<cv::KeyPoint>> &, cv::Mat &, std::vector<std::vector<int,std::allocator<int>>,std::allocator<std::vector<int,std::allocator<int>>>> *, cv::Mat *)
而且我不知道怎麼樣。
當我將鼠標懸停在BOWImgDescriptorExtracotr上時,我可以看到該類。在那裏,我可以看到方法聲明,這是以下幾點:
void compute(const Mat& image, vector<KeyPoint>& keypoints, Mat& imgDescriptor,
vector<vector<int> >* pointIdxsOfClusters=0, Mat* descriptors=0);
// compute() is not constant because DescriptorMatcher::match is not constant
正如你所看到的,其他參數有自己的缺省值,但仍出於某種原因,我得到一個錯誤的參數無效。雖然這應該是方法與在類..由於某種原因,給出的方法不同..
我的代碼如下:
Mat features;
vector<KeyPoint> keypoints;
detector->detect(matGray, keypoints);
KeyPointsFilter::retainBest(keypoints, 1500);
bowDE.compute(matGray, keypoints, features);
這裏是在編譯的時候輸出:
SVMDetector.cpp:45:45: error: no matching function for call to 'cv::BOWImgDescriptorExtractor::compute(cv::Mat&, std::vector<cv::KeyPoint>&, const cv::Mat&)'
SVMDetector.cpp:45:45: note: candidate is:
OpenCV-2.4.9-android-sdk/sdk/native/jni/include/opencv2/features2d/features2d.hpp:1592:10: note: void cv::BOWImgDescriptorExtractor::compute(const cv::Mat&, std::vector<cv::KeyPoint>&, cv::Mat&, std::vector<std::vector<int> >*, cv::Mat*)
OpenCV-2.4.9-android-sdk/sdk/native/jni/include/opencv2/features2d/features2d.hpp:1592:10: note: no known conversion for argument 3 from 'const cv::Mat' to 'cv::Mat&'
make: *** [/<some path>/local/armeabi-v7a/objs/svm_detector/SVMDetector.o] Error 1
您可以舉個例子或解釋嗎?提前致謝!