代码选自:http://blog.csdn.net/zhaocj/article/details/42124473
SIFT算法是用来检测图像中特征点的,
代码如下:
opencv版本:2.4.9
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/nonfree/nonfree.hpp"
using namespace cv;
int main()
{
Mat img = imread("test.jpg");
SIFT sift;//实例化SIFT类,如果代码改为SIFT sift(100);则只检测100个特征点
vector<KeyPoint> key_points;//特征点
Mat descriptors, mascara;
Mat output_img;//输出图像矩阵
sift(img, mascara, key_points, descriptors);//执行sift运算
//在输出图像上绘制特征点
drawKeypoints(img, //输入图像
key_points, //特征点矢量
output_img, //输出图像
Scalar::all(-1), //绘制特征点的颜色, 随机颜色
//以特征点为中心画圆,圆半径表示特征点的大小,直线表示特征点的方向
DrawMatchesFlags::DRAW_RICH_KEYPOINTS
);
namedWindow("SIFT");
imshow("SIFT",output_img);
waitKey(0);
return 0;
}
运行结果如下: