我有一些OpenCV關鍵點,它們存儲爲vector<KeyPoint>
或list<KeyPoint>
。 如何根據關鍵點的響應對它們進行排序以獲得最佳的n個關鍵點?如何根據響應對opencv KeyPoints進行排序?
問候。
我有一些OpenCV關鍵點,它們存儲爲vector<KeyPoint>
或list<KeyPoint>
。 如何根據關鍵點的響應對它們進行排序以獲得最佳的n個關鍵點?如何根據響應對opencv KeyPoints進行排序?
問候。
綜觀文檔和猜測你正在嘗試做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;
}
:
#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;
}
我已經存儲在關鍵點作爲std::vector<cv::KeyPoint>
並用排序它們:
std::sort(keypoints.begin(), keypoints.end(), [](cv::KeyPoint a, cv::KeyPoint b) { return a.response > b.response; });
注:對於λ-表達所需C++ 11用法。
如果我將它們存儲爲'list',我想知道是否有將它排序爲簡單的'list.sort()'? –
beaver
是的,你可以看看清單文檔:http://www.cplusplus.com/reference/stl/list/sort/。您可以對「comp」使用自定義函數,以獲取2個KeyPoint參數並通過響應進行比較。比你只是將該方法提供給列表排序。 – Adrian
@AdrianPopovici酷!它有助於。 – beaver