2015-02-10 308 views
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 

您可以舉個例子或解釋嗎?提前致謝!

回答

0

我認爲這可能是IDE(Eclipse月神)的問題。今天我打開電腦並開始eclipse之後,沒有任何錯誤。