zoukankan      html  css  js  c++  java
  • 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 }

  • 相关阅读:
    Python 以指定列宽格式化字符串
    Windows环境下QWT安装及配置
    iOS用户体验之-modal上下文
    android-调用系统的ContentPrivder获取单张图片实现剪切做头像及源代码下载
    Codeforces Round #253 (Div. 1) A Borya and Hanabi
    剑指offer 面试题9
    Memcache应用场景介绍
    [Unity-22] Coroutine协程浅析
    ZOJ 2706 Thermal Death of the Universe (线段树)
    为什么不建议用Table布局
  • 原文地址:https://www.cnblogs.com/hsy1941/p/8025490.html
Copyright © 2011-2022 走看看