Mac OSX 10.8、XCode 4.6、C ++
私は自分のシステムopencv_tutorials.pdf
にあるのチュートリアルに従って/opt/local/share/OpenCV/doc
います。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
コードはコンパイルされます。つまり、シンボルdetector.detect
はhpp
ファイル内にあり、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
しかし、成功しませんでした。
ありがたいです
- これらのOpenCvAPIを見つけるための具体的なヘルプ
- この種のクエリの一般的な戦略:「リンクする必要のあるシンボルがどのライブラリに含まれているか」。この種の問題は私にC++を嫌いにさせます。なぜなら、5分間のコーディングは常に何時間ものライブラリ検索につながるように思われるからです。おそらく、これを行うための専門的な秘密がわからないためです。