1

機能検出アルゴリズムをコンパイルしようとすると、次のコンパイルエラーが発生します。clangでコンパイル/リンクしています。OpenCVバージョンは2.3.1リリースです。私は(大まかに)このチュートリアルに従って機能を一致させています:http://opencv.itseez.com/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html

error: use of undeclared identifier 'SurfDescriptorExtractor';
      did you mean 'OrbDescriptorExtractor'?
SurfDescriptorExtractor extractor;
^

興味深いことに、BriefおよびOrb記述子エクストラクタは「正常に」機能します(実行時エラーが発生することになります)。

関連するコードは次のとおりです。

void setup_and_draw_keypoints(Mat& img, Mat& prev)
{
  // Detect Keypoints
  vector<KeyPoint> keypoints, prev_keypoints;
  GoodFeaturesToTrackDetector gftt;
  gftt.detect(img, keypoints);
  gftt.detect(prev, prev_keypoints);

  //Extract Descriptors
  SurfDescriptorExtractor extractor;
  Mat desc_1, desc_2; // Descriptors
  extractor.compute(img, keypoints, desc_1);
  extractor.compute(prev, prev_keypoints, desc_2);
  FlannBasedMatcher matcher;
  vector<DMatch> matches;

  matcher.match(desc_1, desc_2, matches);
}
4

2 に答える 2

1

リンク先のチュートリアルは、features2dライブラリを無料の(特許を取得していないオープンライセンスの)アルゴリズムと、オープンライセンスされていないものに分離する前に作成されました。SURFとSIFTはそのような2つのアルゴリズムです。SurfFeatureDescriptorにアクセスするには、nonfreeincludesフォルダーからfeatures2d.hppヘッダーをインクルードするだけです。

私のopencvディストリビューション(現在2.4.1を使用しています)では、「C:\ Users \ Jake \ Downloads \ opencv \ modules \ nonfree \ include \ opencv2 \ nonfree\features2d.hpp」にあります。パス「C:\ Users \ Jake \ Downloads \ opencv \ modules \ nonfree \ include \」がプロジェクト設定のインクルードディレクトリとしてリストされているので、コードでは次のようにします。

#include <opencv2/nonfree/features2d.hpp>

SiftDescriptorExtractor siftExtractor;
//Later on in the file, after a frame has been grabbed, keypoints found, etc.
Mat siftDescriptors;
siftExtractor.compute(frame,roiKP,siftDescriptors);

そして、あなたはそれを持っています。これがあなたに役立つのに遅すぎないことを願っています。

于 2012-07-27T17:38:53.310 に答える
0

ライブラリのドキュメントに何かがあるという事実は、必ずしもそれがライブラリの.soとヘッダーにあることを意味するわけではありません;)

Open CVには複数のモジュールがあり、そのうちの1つはflannです。これは、おそらくflannがインストールされている場合にのみコンパイルされるため、明示的に要求する必要がある場合もあります。opencvのソースtar.gzダウンロードでcmakeまたはcmake-guiを実行すると、コンパイルするモジュールを選択できます。

たぶんあなたはソースからopencvをコンパイルしなかったでしょう、この場合あなたのLinuxシステムパッケージメンテナはコンパイルしました、そしてそれを含んでいなかったかもしれません。

これはあなたが見つけるかもしれない方法です:

[herbert@Durk ~]$ ls /usr/lib/libopencv_*.so
/usr/lib/libopencv_calib3d.so  /usr/lib/libopencv_features2d.so      /usr/lib/libopencv_highgui.so  /usr/lib/libopencv_ml.so         /usr/lib/libopencv_photo.so          /usr/lib/libopencv_video.so
/usr/lib/libopencv_contrib.so  /usr/lib/libopencv_flann.so           /usr/lib/libopencv_imgproc.so  /usr/lib/libopencv_nonfree.so        /usr/lib/libopencv_stitching.so  /usr/lib/libopencv_videostab.so
/usr/lib/libopencv_core.so     /usr/lib/libopencv_gpu.so             /usr/lib/libopencv_legacy.so   /usr/lib/libopencv_objdetect.so  /usr/lib/libopencv_ts.so
[herbert@Durk ~]$ ls /usr/include/opencv2/
calib3d  contrib  core  features2d  flann  gpu  highgui  imgproc  legacy  ml  nonfree      objdetect  opencv.hpp  opencv_modules.hpp  photo  stitching  ts  video  videostab
[herbert@Durk ~]$ 

ご覧のとおり、フランがインストールされているのは幸運です;)

于 2012-05-29T23:09:08.857 に答える