2014-03-19 64 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);