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 件のコメント:
コメントを投稿