2014年8月27日水曜日

OpenCV 3.0 alpha で SIFTを動かした

OpenCV 3.0 alphaでは、SIFTはcontribに移され、APIも見直しされている

2.4.9では、common interfaceからSIFTが利用できたが、3.0 alphaでは、comon interfaceからSIFTやSURFは削除されている

3.0 alphaでのSIFTの説明は、ここに移動している

内容は、2.4.9のnonfreeの説明と変わらないが、operator ()の説明をよく見ると、keypointのみの取得ができないように見える


サンプルを探してみたが、3.0 alphaでは、SIFT関連のサンプルがなくなっているようだ。いろいろ探し回った結果、
ヘッダーファイルの opencv2/xfeatures2d/nonfree.hpp に

void operator()(InputArray img, InputArray mask, std::vector<KeyPoint>& keypoints) const;

を見つけた

SIFTのサンプルコードは、以下のようになる

// main用
#include <opencv2/opencv.hpp>
//
// contribは個別に指定
//
#include <opencv2/xfeatures2d/nonfree.hpp>

int main( int argc, char** argv )
{
cv::Mat image, gimage;
std::string fname = "./opencv/samples/cpp/baboon.jpg";

cv::xfeatures2d::SIFT detector;
std::vector<cv::KeyPoint> keypoints;

image = cv::imread(fname);

cv::cvtColor(image, gimage, cv::COLOR_BGR2GRAY);

    //void operator()(InputArray img, InputArray mask, std::vector<KeyPoint>& keypoints) const;
detector(gimage, cv::Mat(), keypoints);

cv::drawKeypoints(image, keypoints, image);

cv::imshow( "sift image", image );

cv::waitKey(0);

return 0;
}

以上

0 件のコメント:

コメントを投稿