opencv角点检测算法接口概述及KeyPoint数据结构

参考链接:
https://www.cnblogs.com/dengxiaojun/p/5302778.html

	图像角点其实也是一种图像特征点,对于一张图像来说,特征点分为三种形式包括边缘,焦点和斑点,在OPENCV中,加上角点检测,总共提供了以下的图像特征点检测算法:

FAST
SURF
ORB
BRISK
KAZE
AKAZE
MESR
GFTT good feature to tack
Bob斑点
STAR
AGAST

KeyPoint结构

首先需要了解OPENCV的一种数据结构, KeyPoint结构,该结构的头文件定义如下:

class KeyPoint
{
Point2f  pt;    //该图像特征点的坐标,包含x,y
float  size;     //特征点邻域直径,即该点直径的大小
float  angle; //特征点的方向,值为[0,360),-1为初值,负值表示不使用,有了这个方向,能够让特征点拥有更高的辨识度,否则仅仅坐标和直径有时会误判特征点。为了保证方向不变形,SIFT算法通过对关键点周围领域进行梯度运算求得该点方向。
float  response;//响应程度,代表该点的强壮程度,也就是该点角点程度,用于后期使用和排序
int  octave; //特征点所在的图像金字塔的组,从金字塔哪一层提取得到的数据。
int  class_id; //用于聚类的id,当要对图片进行分类时,我们可以用class_id对每个特征进行区分,未设定时为-1,需要靠自己设定
}

图像特征点检测的通用接口

Opencv为了方便用户使用图像特征点检测的相应算法,将全部的特征点检测都封在一个类似的API中,名为Ptr的模板类,也就是说,所有的特征检测算法都实现了相同的借口,detect 检测图像特征点.使用方法类似于
  Ptr<相应的特征点检测类名>变量名 = 相应的特征点检测类::create()
  变量名->detect(原图像,特征点向量).

  使用上面描述的算法,就可以调用几乎全部的图像特征检测算法.但是注意,create函数有多个重载函数,如果为空,每个图像检测算法都会使用自己的一套默认的初始值来初始化类,如果想修改参数,那么create函数调用的时候需要根据检测类的不同,设置不同的初始化变量.
  另外,opencv提供而一个快速显示图像特征点的函数,如下
  drawKeyPoints(画布图像,特征点向量集,输出的绘制结果,绘制颜色值,绘制模式)
  一般来说,画布图像会使用我们检测特征点的原图像(一般检测特征点都是原图像变换为灰度图像之后进行的检测,简单算法复杂度).


void cv::drawKeypoints  ( InputArray  image,  
  const std::vector< KeyPoint > &  keypoints,  
  InputOutputArray  outImage,  
  const Scalar &  color = Scalar::all(-1),  
  DrawMatchesFlags  flags = DrawMatchesFlags::DEFAULT  
 ) 


在这里插入图片描述
  绘制模式有以下方法可以选择,是DrawMatchesFlags枚举
  DEFAULT:只绘制特征点的坐标点,显示在图像上就是一个个小圆点,每个小圆点的圆心坐标都是特征点的坐标.
  DRAW_OVER_OUTIMG:函数不创建输出的图像,而是直接在输出图像变量空间绘制,要求本身输出图像变量就是一个初始化好了的,size与type都是已经初始化好的变量
  NOT_DRAW_SINGLE 单点的特征点不被绘制
  DRAW_RICH_KEYPOINT 绘制特征点的时候绘制的是一个个带有方向的圆,这种方法同时显示图像的坐标,size,和方向,是最能显示特征的一种绘制方式,但是缺点就是绘制结果太杂乱.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值