C++ 如何根据响应对opencv关键点进行排序?

C++ 如何根据响应对opencv关键点进行排序?,c++,opencv,C++,Opencv,我有一些OpenCV关键点,它们存储为vector或list。 如何根据关键点的响应对它们进行排序,以获得最佳的n个关键点 问候。查看文档,猜测您要做什么 这里是在OpenCV中 据我所知,您想要使用的是响应元素: float response; // the response by which the most strong keypoints have been selected. Can be used for the further sorting or subsampling 这就是

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


问候。

查看文档,猜测您要做什么

这里是在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代码,所以希望能够执行一些更正)

//列表::排序
#包括
#包括
使用名称空间std;
//响应比较,用于列表排序
布尔比较_响应(关键点第一,关键点第二)
{
if(first.response
如果将关键点存储在向量中:

#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;
}
#包含//标准::排序
#include//std::vector
int main(){
向量关键点;
//在这里提取关键点
排序(keypoints.begin()、keypoints.end()、响应\比较器);
//用按响应排序的关键点做任何你想做的事情
}
布尔响应\u比较器(常数关键点和p1、常数关键点和p2){
返回p1.response>p2.response;
}

我已将关键点存储为
std::vector
,并使用以下内容对其进行排序:

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

注释:使用C++ 11来表示lambda表达式。

如果我将它们存储为<代码>列表< /> >,我想知道到底有没有把它排序为简单的<代码>列表.SoTo()/Cube >?是的,你可以看看列表文档:您只需为“comp”使用一个自定义函数,该函数获取2个关键点参数,并通过响应进行比较。我不知道数字接近正无穷大的“响应”比接近负无穷大的“响应”好还是相反。我会假设一个更积极的回应会更好。
 std::sort(keypoints.begin(), keypoints.end(), [](cv::KeyPoint a, cv::KeyPoint b) { return a.response > b.response; });