2014-03-19 66 views
0

如何在OpenCV中使用OpenCV中的一个DescriptorMatchers以如下方式创建描述符。如何在OpenCV中创建描述符矩阵

cv::BFMatcher matcher(cv::NORM_L2, false); 
std::vector<cv::DMatch> matches; 
matcher.match(descriptors_1, descriptors_2, matches); 

我已经有了以下描述符类。如何转换或创建可与DescriptorMatcher一起使用的新矩阵。最好是BFMatcher。

class Descriptor 
{ 
    public: 
    float lxi, lyi; // Location of descriptor 
    vector<double> feature; 

    Descriptor() 
    { 
    } 

    Descriptor(float x, float y, vector<double> const& f) 
    { 
     lxi = x; 
     lyi = y; 
     feature = f; 
    } 
}; 
+0

opencv的描述符是1d float(SIFT/SURF)或uchar(ORB; BRIEF等)Mat的。所以你的描述符类,也不是你的矢量将工作 – berak

+0

我可以放弃我的描述符类。有没有办法通过我的代码创建一个新的描述符矩阵?我找不到有关矩阵结构或形式的任何信息。 –

+0

不知道如何创建自定义?描述符,但是您可以创建Mat和push_back()值(就像使用矢量一样) – berak

回答

0

我只是在寻找关于同一问题的答案时才访问这里。 但很快我发现答案非常简单,您只需要做一个垫子。

例如,下面是一些SIFT-LIKE描述符。

cv::Mat descriptors_1(nQueries, dimemsion, CV_32F,(void*)pQueries); 
cv::Mat descriptors_2(m_nDataSets, dimemsion, CV_32F,(void*)m_pData); 

cv::FlannBasedMatcher matcher; 
std::vector<cv::DMatch> matches; 
matcher.match(descriptors_1, descriptors_2, matches);