2012-06-06 41 views

回答

6

綜觀文檔和猜測你正在嘗試做something like this

這裏是how KeyPoint is implemented在OpenCV中。

所以從我個人理解,你想用什麼響應元素:

float response; // the response by which the most strong keypoints have been selected. Can be used for the further sorting or subsampling 

那麼這絕對是我會在你的情況下,將要爲。 創建的響應:)

希望這有助於梳理你的載體功能

編輯

欲借阿德里安的意見(這是我的第一個cpp的代碼了,所以希望有一些修正執行)

// list::sort 
#include <list> 
#include <cctype> 
using namespace std; 

// response comparison, for list sorting 
bool compare_response(KeyPoints first, KeyPoints second) 
{ 
    if (first.response < second.response) return true; 
    else return false; 
} 

int main() 
{ 
    list<KeyPoints> mylist; 
    list<KeyPoints>::iterator it; 

    // opencv code that fills up my list 

    mylist.sort(compare_response); 

    return 0; 
} 
+0

如果我將它們存儲爲'list ',我想知道是否有將它排序爲簡單的'list.sort()'? – beaver

+3

是的,你可以看看清單文檔:http://www.cplusplus.com/reference/stl/list/sort/。您可以對「comp」使用自定義函數,以獲取2個KeyPoint參數並通過響應進行比較。比你只是將該方法提供給列表排序。 – Adrian

+0

@AdrianPopovici酷!它有助於。 – beaver

3
如果你存儲的關鍵點在矢量

#include <algorithm> // std::sort 
#include <vector> // std::vector 

int main() { 
    std::vector<KeyPoint> keypoints; 

    // extract keypoints right here 

    std::sort(keypoints.begin(), keypoints.end(), response_comparator); 

    // do what ever you want with keypoints which sorted by response 
} 

bool response_comparator(const KeyPoint& p1, const KeyPoint& p2) { 
    return p1.response > p2.response; 
} 
5

我已經存儲在關鍵點作爲std::vector<cv::KeyPoint>並用排序它們:

std::sort(keypoints.begin(), keypoints.end(), [](cv::KeyPoint a, cv::KeyPoint b) { return a.response > b.response; }); 

注:對於λ-表達所需C++ 11用法。

相關問題