视觉slam14讲VO前端设计中 std::min_element和lambda表达式的运用讲解

float min_dis = std::min_element (matches.begin(), matches.end(),[] ( const cv::DMatch& m1, const cv::DMatch& m2 )
{
return m1.distance < m2.distance;
} )->distance;

这就是书中使用了std::min_element和lambda表达式的程序,这段程序具体实现的功能是找到matches这个用来存放匹配的关键点的描述子中描述子的最小的距离,然后赋值给min_dis,matches是存放Dmatch这个描述子类的容器,所有最后会有->distance表示赋给min_dis的是距离。

返回容器或者数组中最大值和最小值。max/min_element(first,end,cmp);其中cmp为可选择参数

[] ( const cv::DMatch& m1, const cv::DMatch& m2 ) 
{ 
    return m1.distance < m2.distance; 
}

这里的lamda函数相当于:

bool cmp(const cv::DMatch& m1, const cv::DMatch& m2)
{
    return m1.distance < m2.distance; 
}

实际的功能就是将matches中的所有描述子进行了个排序,然后min_element取了第一个及最小的那个的distance赋给了min_dis

猜你喜欢

转载自blog.csdn.net/weixin_38078991/article/details/81607744