[英]OpenCv 2.4.3: can't find imread and SurfFeatureDetector::detect
在Mac OSX 10.8,XCode 4.6和C ++中
我正在遵循系統中/opt/local/share/OpenCV/doc
中opencv_tutorials.pdf
的教程。 在第311頁,我們獲得了此樣本(略作編輯):
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
int main( int argc, char** argv ) {
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints_1;
detector.detect( img_1, keypoints_1 );
}
我必須將上面的代碼修改為#include "opencv2/nonFree/features2d.hpp"
,這是我通過運行找到的文件
find /opt/local/include -name "*.hpp" -exec grep SurfFeatureDetector "{}" ';' -print
該代碼將進行編譯,這意味着在hpp
文件中可以找到符號detector.detect
,並通過C ++編譯器進行類型檢查。 接下來是嘗試查找包含符號的庫。
現在,我在/opt/local/lib
有這些庫:
libopencv_calib3d.2.4.3.dylib
libopencv_contrib.2.4.3.dylib
libopencv_core.2.4.3.dylib
libopencv_features2d.2.4.3.dylib
libopencv_flann.2.4.3.dylib
libopencv_gpu.2.4.3.dylib
libopencv_highgui.2.4.3.dylib
libopencv_imgproc.2.4.3.dylib
libopencv_legacy.2.4.3.dylib
libopencv_ml.2.4.3.dylib
libopencv_nonfree.2.4.3.dylib
libopencv_objdetect.2.4.3.dylib
libopencv_photo.2.4.3.dylib
libopencv_stitching.2.4.3.dylib
libopencv_ts.2.4.3.dylib
libopencv_video.2.4.3.dylib
libopencv_videostab.2.4.3.dylib
我發現nm
搜索這些必需的符號沒有任何意義,因為名稱修飾很難在我的腦海中反編譯。 我只是蠻力地包括了所有庫,但仍然出現鏈接器錯誤:
Undefined symbols for architecture x86_64:
"cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
_main in main.o
"cv::FeatureDetector::detect(cv::Mat const&, std::__1::vector<cv::KeyPoint, std::__1::allocator<cv::KeyPoint> >&, cv::Mat const&) const", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
從這里開始,我已經對OpenCv參考文檔和Wiki頁面進行了一些抽查。
http://opencv.willowgarage.com/documentation/cpp/features2d__feature_detection_and_descriptor_extraction.html
但沒有成功。
我會很感激
在Linux上並使用OpenCV 3.0.0,我必須鏈接到opencv_imgcodecs
共享庫。
我的工具鏈利用CMake來跟蹤這些事情。 對於我使用的大多數新庫,通常都會有google可搜索的伴隨着其他人編寫的Find * .cmake文件。 如果您想了解有關我的特定設置的更多信息,請隨時詢問。 對於非自由庫中的內容,我已經多次看到此特定問題(體系結構x86_64的未定義符號)。 不過,我不確定為什么您會收到該錯誤。 我首先要看的是samples / cpp文件夾中的matcher_simple.cpp示例。 如果您可以編譯並運行此代碼(使用this )和其他示例,則設置應該可以。 如果不能,請張貼該示例的錯誤信息嗎? 我不熟悉XCode,但是其他人建議轉到Build Settings> Build Options> C / C ++ / Objective-C的編譯器,並將其從Apple LLVM編譯器更改為LLVM GCC 4.2。 還有一些其他的猜測在這里了。
嘗試在構建設置中的其他鏈接器標志列表中包括-lopencv_features2d
和-lopencv_nonfree
。 我遇到了同樣的問題,對我有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.