我有一些OpenCV KeyPoints,它们存储为vector<KeyPoint>
或list<KeyPoint>
。
如何根据KeyPoints的响应对它们进行排序以获得最佳的n个关键点?
问候。
答案 0 :(得分:6)
查看文档,并猜测您正在尝试something like this,
这是OpenCV中的how KeyPoint is implemented。
所以根据我的理解,你想要使用的是响应元素:
float response; // the response by which the most strong keypoints have been selected. Can be used for the further sorting or subsampling
所以这绝对是我在你的情况下要做的。 创建一个函数,通过响应对矢量进行排序:)
希望这有帮助
编辑:
试图利用Adrian的建议(这是我的第一个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;
}
答案 1 :(得分:5)
我已将关键点存储为std::vector<cv::KeyPoint>
,并按以下方式对其进行排序:
std::sort(keypoints.begin(), keypoints.end(), [](cv::KeyPoint a, cv::KeyPoint b) { return a.response > b.response; });
注意:lambda-expression需要使用C ++ 11。
答案 2 :(得分: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;
}