2017-04-23 4 views
1

In Funktion keypoint_calc(cv::Mat)': FilePath/MyFirstOpenCVJNI-master/jni/first-opencvjni.cpp:35: undefined reference to cv :: xfeatures2d :: SIFT :: create (int, int, double, double, double)‘OpenCV SIFT undefinierte Referenzen Ausgabe

./obj/local/arm64-v8a/objs/first -opencvjni/First-opencvjni.o: In Funktion 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 :: create (int, int, double, double, double)‘

#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" 

sind meine enthält.

Und auf den genannten Zeilen habe ich folgenden Code.

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

und

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

Ich bin ein noob jede Hilfe JNI würde sehr geschätzt.

Antwort

0

Nach Tagen des Kampfes endlich in der Lage, das Contrib-Modul zu lösen, kam nach einiger Arbeit ein ziemlich schöner selbst erklärbarer Artikel auf, um die opencv mit Extra-Modulen zu bauen. Der Link für das gleiche ist here

Und falls jemand will ein bereits eingebaut opencv Master mit contrib Zusatzmodule verwenden, können sie sich frei fühlen es von meinem Repo zu verwenden, ist der Link für die gleichen this, dieser Artikel funktioniert nur unter Windows, nur aus Gründen der Information, da ich es versäumt habe, dasselbe auf einem Mac zu verfolgen.

0

Die nicht definierte Referenz wird vom Linker gemeldet. Ihr Projekt (Android.mk oder CMakeLists.txt) sollte die OpenCV-Bibliotheken enthalten. SIFT ist patentiert, daher ist es nicht Teil der kostenlosen vorinstallierten OpenCV Android-Distribution. Sie können entweder libnonfree.so separat erstellen und als vordefinierte gemeinsame Bibliothek in Ihrer App verwenden oder SIFT als statische Bibliothek kompilieren.

Detaillierte Anweisungen finden Sie here und here, aber sie erfordern möglicherweise Anpassung für die neueste (3.2) Version und die neue NDK-Version. Wenn Sie sich nicht für die neueste Version interessieren, können Sie auch prebuilt binaries herunterladen.

Verwandte Themen