2012年6月17日日曜日

OpenCV 2.4 で SURF が使えない

OpenCV 2.4 (c++版)でSURFを使おうとするとコンパイルが通りません。


こんな感じのコード

#include <iostream>
#include <string>

#include <cv.h>
#include <highgui.h>

using namespace std;
using namespace cv;

int main( int argc, char* argv[] ){
  if( argc < 1 ) return 1;
  
  Mat colorImage = imread( argv[1], 1);
  if( colorImage.empty() ) return -1;

  Mat grayImage;
  cvtColor( colorImage, grayImage, CV_BGR2GRAY );

  SURF calc_surf = SURF(500,4,2,true);

  vector<keypoint> kp_vec;
  vector<float> desc_vec;
  calc_surf( grayImage, Mat(), kp_vec, desc_vec);

  cout << "Image keypoints " << kp_vec.size() << endl;
  return 0;
}


これでコンパイルすると、


~/Development/cpp-study# g++ study.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`
study.cpp: In function ‘int main(int, char**)’:
study.cpp:19: error: ‘SURF’ was not declared in this scope
study.cpp:19: error: expected `;' before ‘calc_surf’
study.cpp:23: error: ‘calc_surf’ was not declared in this scope

な感じで怒られます。
どうやら、ヘッダファイルにSURFがインクルードされていないみたいです。
SURFが定義されているのが、nonfree/nonfree.hpp なのですが、インクルードしたcv.h
を見てみると、nonfree.hppがインクルードされていません

なのでcv.hを以下のように変更します

/*M///////////////////////////////////////////////////////////////////////////////////////
//
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
//  By downloading, copying, installing or using the software you agree to this license.
//  If you do not agree to this license, do not download, install,
//  copy or use the software.

~~~中略~~~~
#include "opencv2/core/core_c.h"
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/tracking.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/flann/flann.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/legacy/compat.hpp"
#include "opencv2/nonfree/nonfree.hpp" // <-- ここを追加
~~~以下略~~~

多分これでうまく行くと思います。
nonfreeっていう名前から、ただでは使えないみたいですね。

0 件のコメント:

コメントを投稿