簡體   English   中英

OpenCv 2.4.3:找不到讀取和SurfFeatureDetector :: detect

[英]OpenCv 2.4.3: can't find imread and SurfFeatureDetector::detect

在Mac OSX 10.8,XCode 4.6和C ++中

我正在遵循系統中/opt/local/share/OpenCV/docopencv_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

但沒有成功。

我會很感激

  1. 查找這些OpenCv API的特定幫助
  2. 這種查詢的一般策略是:“哪個庫包含我需要鏈接的符號”。 這種問題使我討厭C ++,因為5分鍾的編碼似乎總是導致數小時的搜索庫丟失,這可能是因為我不知道這樣做的專業秘密。

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM