2012-06-05 3 views
2

Я реализую этот простой пример, чтобы ознакомиться с OpenCv и SIFT.Простой детектор SIFT ISSUE на OpenCV

1 #include <opencv2/core/core.hpp> 
2 #include <opencv2/features2d/features2d.hpp> 
3 #include <opencv2/highgui/highgui.hpp> 
4 
5 using namespace std; 
6 
7 int main(int argc, char** argv) { 
8 
9  const cv::Mat input = cv::imread("/tmp/image.jpg", 0); //Load as grayscale 
10 
11 cv::SiftFeatureDetector detector; 
12 std::vector<cv::KeyPoint> keypoints; 
13 detector.detect(input, keypoints); 
14 
15 // Add results to image and save. 
16 cv::Mat output; 
17 cv::drawKeypoints(input, keypoints, output); 
18 cv::imwrite("/tmp/SIFT_RESULT.jpg", output); 
19 
20 return 0; 
21 
22 } 

Я ожидал, что это будет довольно просто, но это бросает следующие ошибки:

  • undefined reference to 'cv::SIFT::CommonParams::CommonParams()' в строке 11
  • undefined reference to 'cv::FeatureDetector::detect(cv::Mat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&, cv::Mat const&) const' в строке 13
  • undefined reference to 'cv::drawKeypoints(cv::Mat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> > const&, cv::Mat&, cv::Scalar_<double> const&, int)' в строке 17

Не могли бы вы рассказать мне, что случилось? Является ли это проблемой в коде, или я не хватает headers?


Полная Сложение Выход:

make all 
Building file: ../main.cpp 
Invoking: GCC C++ Compiler 
g++ -I/usr/local/include/opencv -I/usr/include/c++/4.5.2 -O0 -g3 -Wall -c -fmessage-length=0 -std=c++0x -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp" 
Finished building: ../main.cpp 

Building target: BioInfo 
Invoking: GCC C++ Linker 
g++ -L/usr/local/lib -o "BioInfo" ./imageProcessingClass.o ./main.o -lopencv_core -lopencv_highgui 
./main.o: In function `main': 
/.../Debug/../main.cpp:38: undefined reference to `cv::SIFT::CommonParams::CommonParams()' 
/.../Debug/../main.cpp:38: undefined reference to `cv::SIFT::DetectorParams::DetectorParams()' 
/.../Debug/../main.cpp:38: undefined reference to `cv::SiftFeatureDetector::SiftFeatureDetector(cv::SIFT::DetectorParams const&, cv::SIFT::CommonParams const&)' 
/.../Debug/../main.cpp:40: undefined reference to `cv::FeatureDetector::detect(cv::Mat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&, cv::Mat const&) const' 
/.../Debug/../main.cpp:44: undefined reference to `cv::drawKeypoints(cv::Mat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> > const&, cv::Mat&, cv::Scalar_<double> const&, int)' 
./main.o: In function `~SiftFeatureDetector': 
/usr/local/include/opencv2/features2d/features2d.hpp:1502: undefined reference to `vtable for cv::SiftFeatureDetector' 
/usr/local/include/opencv2/features2d/features2d.hpp:1502: undefined reference to `cv::FeatureDetector::~FeatureDetector()' 
collect2: ld returned 1 exit status 
make: *** [BioInfo] Error 1 

Build Finished 
+0

вы не связаны с features2d – silent

ответ

5

Кажется, вы забыли связать с библиотеками OpenCV. Также помните, если вы связываетесь с OpenCV 2.4, есть новая библиотека для «несвободных» алгоритмов с именем opencv_nonfree, с которой вам нужно связать для SIFT.

+1

'ссылающегося на: GCC C++ Linker г ++ -L/USR/местные/Библиотека -o "BioInfo" ./imageProcessingClass.o ./main.o -lopencv_core -lopencv_highgui' что еще нужно Я связываю -lopencv_features2d? – Matteo

+0

Yep ... thks! Как глупо ... – Matteo

Смежные вопросы