Opencv的KeyPoint和DMatch数据结构

Posted TransTown

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Opencv的KeyPoint和DMatch数据结构相关的知识,希望对你有一定的参考价值。

/* 
 * Struct for matching: query descriptor index, train descriptor index, train image index and distance between descriptors. 
 */  
 /* 
  * DMatch主要用来储存匹配信息的结构体,query是要匹配的描述子,train是被匹配的描述子,在Opencv中进行匹配时 
  * void DescriptorMatcher::match( const Mat& queryDescriptors, const Mat& trainDescriptors, vector<DMatch>& matches, const Mat& mask ) const 
  * match函数的参数中位置在前面的为query descriptor,后面的是 train descriptor 
  * 例如:query descriptor的数目为20,train descriptor数目为30,则DescriptorMatcher::match后的vector<DMatch>的size为20 
  * 若反过来,则vector<DMatch>的size为30 
  *  
 */  
struct CV_EXPORTS_W_SIMPLE DMatch  
{  
    //默认构造函数,FLT_MAX是无穷大  
    //#define FLT_MAX         3.402823466e+38F        /* max value */  
    CV_WRAP DMatch() : queryIdx(-1), trainIdx(-1), imgIdx(-1), distance(FLT_MAX) {}  
    //DMatch构造函数  
    CV_WRAP DMatch( int _queryIdx, int _trainIdx, float _distance ) :  
            queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(-1), distance(_distance) {}  
    //DMatch构造函数  
    CV_WRAP DMatch( int _queryIdx, int _trainIdx, int _imgIdx, float _distance ) :  
            queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(_imgIdx), distance(_distance) {}  
  
    //queryIdx为query描述子的索引,match函数中前面的那个描述子  
    CV_PROP_RW int queryIdx; // query descriptor index  
    //trainIdx为train描述子的索引,match函数中后面的那个描述子  
    CV_PROP_RW int trainIdx; // train descriptor index  
    //imgIdx为进行匹配图像的索引  
    //例如已知一幅图像的sift描述子,与其他十幅图像的描述子进行匹配,找最相似的图像,则imgIdx此时就有用了。  
    CV_PROP_RW int imgIdx;   // train image index  
    //distance为两个描述子之间的距离  
    CV_PROP_RW float distance;  
    //DMatch比较运算符重载,比较的是DMatch中的distance,小于为true,否则为false  
    // less is better  
    bool operator<( const DMatch &m ) const  
    {  
        return distance < m.distance;  
    }  
};  

  


KeyPoint这数据结构中有如下数据结构(http://docs.opencv.org/3.3.0/d2/d29/classcv_1_1KeyPoint.html):

angle:角度,表示关键点的方向,通过Lowe大神的论文可以知道,为了保证方向不变形,SIFT算法通过对关键点周围邻域进行梯度运算,求得该点方向。-1为初值。

class_id:当要对图片进行分类时,我们可以用class_id对每个特征点进行区分,未设定时为-1,需要靠自己设定

octave:代表是从金字塔哪一层提取的得到的数据。

pt:关键点点的坐标

response:响应程度,代表该点强壮大小—response代表着该关键点how good,更确切的说,是该点角点的程度。

size:该点直径的大小

以上是关于Opencv的KeyPoint和DMatch数据结构的主要内容,如果未能解决你的问题,请参考以下文章

Java中OpenCV中的KeyPoint和MatchDpoint是啥

python opencv KeyPoint

python opencv KeyPoint

将 MatofKeypoint 从 Java 传递到 c++ 作为 vector<Keypoint> - opencv

[OpenCV]DMatch类和KeyPoints类:特征点匹配

opencv c++ mat to vector<keypoint>