surf特征点检测

※注:参数SURF中的hessian阈值是图像Hessian矩阵判别式的阈值,值越大检测出的特征点就越少,也就意味着特征点越稳定

 1 #include "opencv2/core/core.hpp"
 2 #include "opencv2/features2d/features2d.hpp"
 3 #include "opencv2/highgui/highgui.hpp"
 4 #include "opencv2/nonfree/nonfree.hpp"
 5 #include <iostream>
 6 using namespace cv;
 7 
 8 
 9 //-----------------------------------【全局函数声明部分】--------------------------------------
10 //          描述:全局函数的声明
11 //-----------------------------------------------------------------------------------------------
12 static void ShowHelpText( );//输出帮助文字
13 
14 //-----------------------------------【main( )函数】--------------------------------------------
15 //   描述:控制台应用程序的入口函数,我们的程序从这里开始执行
16 //-----------------------------------------------------------------------------------------------
17 int main( int argc, char** argv )
18 {
19     //【0】改变console字体颜色    
20     system("color 2F");    
21     //【0】显示帮助文字  
22     ShowHelpText( );  
23 
24     //【1】载入源图片并显示
25     Mat srcImage1 = imread("1.jpg", 1 );
26     Mat srcImage2 = imread("2.jpg", 1 );
27     if( !srcImage1.data || !srcImage2.data )//检测是否读取成功
28     { printf("读取图片错误,请确定目录下是否有imread函数指定名称的图片存在~! 
");
29     return false;
30     } 
31 
32 
33     //【2】定义需要用到的变量和类
34     int minHessian = 4000;//定义SURF中的hessian阈值特征点检测算子
35     SurfFeatureDetector detector( minHessian );//定义一个SurfFeatureDetector(SURF) 特征检测类对象
36     vector<KeyPoint> keypoints_1, keypoints_2;//vector模板类是能够存放任意类型的动态数组,能够增加和压缩数据
37 
38     //【3】调用detect函数检测出SURF特征关键点,保存在vector容器中
39     detector.detect( srcImage1, keypoints_1 );
40     detector.detect( srcImage2, keypoints_2 );
41 
42     //【4】绘制特征关键点.
43     Mat img_keypoints_1; Mat img_keypoints_2;
44     drawKeypoints( srcImage1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
45     drawKeypoints( srcImage2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
46 
47     //【5】显示效果图
48     imshow("特征点检测效果图1", img_keypoints_1 );
49     imshow("特征点检测效果图2", img_keypoints_2 );
50 
51     waitKey(0);
52     return 0;
53 }
54 
55 
56 //-----------------------------------【ShowHelpText( )函数】----------------------------------
57 //          描述:输出一些帮助信息
58 //----------------------------------------------------------------------------------------------
59 void ShowHelpText()
60 { 
61     //输出欢迎信息和OpenCV版本
62     printf("

			非常感谢购买《OpenCV3编程入门》一书!
");
63     printf("

			此为本书OpenCV2版的第89个配套示例程序
");
64     printf("

			   当前使用的OpenCV版本为:" CV_VERSION );
65     printf("

  ----------------------------------------------------------------------------
");
66     //输出一些帮助信息  
67     printf("

	欢迎来到【SURF特征点检测】示例程序

");     
68     printf( "
	按键操作说明: 

"     
69         "		键盘按键任意键- 退出程序

"    );
70 
71 }

原文地址:https://www.cnblogs.com/hsy1941/p/8025490.html