如何在 Android NDK 中使用 OpenCV BOWImgDescriptorExtractor?

How to use OpenCV BOWImgDescriptorExtractor in Android NDK?

我有一个带有本机部分的 Android 应用程序。它将使用 svm,所以我需要 BOWImgDescriptorExtractor。我的问题是我无法像在 PC 上那样使用 bowDE.compute();。 Android 没有使用此参数的实现:bowDe.compute(Mat& img, vector<KeyPoint>& keypoints, Mat& descriptors);

我必须使用以下方法:

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 上时,我可以看到 class。在那里我可以看到方法声明,如下所示:

 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

如您所见,其他参数有它们的默认值,但由于某种原因我仍然收到无效参数的错误。虽然它应该是的方法与 class 中给出的方法不同.. 由于某种原因..

我的代码如下:

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

你能举个例子或解释一下吗?提前致谢!

我认为 IDE (Eclipse Luna) 可能有问题。今天打开电脑,启动eclipse后,没有报错。