4

我有一些 OpenCV 关键点,它们存储为vector<KeyPoint>or list<KeyPoint>。如何根据 KeyPoints 的响应对它们进行排序以获得最佳的 n 个关键点?

问候。

4

3 回答 3

6

查看文档,并猜测您正在尝试做这样的事情

这是KeyPoint在 OpenCV 中的实现方式。

因此,据我了解,您要使用的是响应元素:

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;
}
于 2012-06-06T08:44:50.173 回答
5

我已将关键点存储为std::vector<cv::KeyPoint>并按以下方式对其进行排序:

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

注意:lambda 表达式需要使用 C++ 11。

于 2016-01-22T13:21:14.550 回答
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;
}
于 2014-07-06T11:34:52.577 回答