こんな感じのコード
#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 件のコメント:
コメントを投稿