2017-04-23 248 views
1

在功能keypoint_calc(cv::Mat)': FilePath/MyFirstOpenCVJNI-master/jni/first-opencvjni.cpp:35: undefined reference to CV :: xfeatures2d :: SIFT ::創建(INT,INT,雙,雙,雙)」opencv的SIFT未定義的引用問題

./obj/local/arm64-v8a/objs/first -opencvjni /先opencvjni.o:在功能sift_descriptor(cv::Mat, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >)': FilePath/MyFirstOpenCVJNI-master/jni/first-opencvjni.cpp:45: undefined reference to CV :: xfeatures2d :: SIFT ::創建(INT,INT,雙,雙,雙)」

#include <jni.h> 
#include <opencv2/core/core.hpp> 
#include <opencv2/imgproc/imgproc_c.h> 
#include <opencv/cv.h> 
#include <opencv2/opencv.hpp> 
#include <GLES2/gl2.h> 
#include <android/log.h> 

#include <opencv2/flann/flann.hpp> 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/calib3d/calib3d.hpp" 
#include "opencv2/nonfree/nonfree.hpp" 
#include "opencv2/nonfree/features2d.hpp" 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/xfeatures2d.hpp> 
#include <iostream> 

#define LOG_TAG "cpp-file" 

是我的包括。

而在這些提到的行我有以下代碼。

cv::Ptr<cv::xfeatures2d::SIFT> feature_detector = cv::xfeatures2d::SIFT::create(200); 

cv::Ptr<cv::xfeatures2d::SIFT> feature_detector = cv::xfeatures2d::SIFT::create(200); 

我對JNI任何幫助一個小白將高度讚賞。

回答

0

經過幾天的努力終於可以解決contrib模塊,經過一番努力後,發現了一個非常不錯的自我解釋性文章,使用Extra模塊構建opencv。的鏈接,同樣是here

而如果有人想使用一個已經建成的OpenCV主用的contrib額外的模塊,就可以隨意從我的回購使用它的鏈接,同樣是this,本文僅適用於Windows,僅僅爲了提供信息,因爲我沒有在Mac上跟蹤相同內容。

0

未定義的參考鏈接器報告。您的項目(Android.mkCMakeLists.txt)應該包含OpenCV庫。 SIFT獲得專利,因此它不屬於免費的預構建OpenCV Android發行版。您可以分別構建libnonfree.so,並將其用作應用程序中的預構建共享庫,或將SIFT編譯爲靜態庫。

詳細說明可以找到herehere,但他們可能需要適應最新的(3.2)版本和新的NDK版本。如果你不關心最新版本,你也可以下載prebuilt binaries