在 max_element 中使用 lambda 函数时出现编译错误
Compile Error with using lamda function with max_element
我正在尝试编写一些代码来找到 std::vector 等高线中具有最大尺寸的等高线。
我有以下错误
error: conversion from ‘__gnu_cxx::__normal_iterator<std::vector<cv::Point_<int> >*, std::vector<std::vector<cv::Point_<int> > > >’ to non-scalar type
‘std::vector<cv::Point_<int> >::iterator {aka __gnu_cxx::__normal_iterator<cv::Point_<int>*, std::vector<cv::Point_<int> > >}’ requested
std::vector<cv::Point2i>::iterator it = std::max_element(contours.begin(), contours.end()
下面是我的代码
std::vector<std::vector <cv::Point2i>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(rImg, contours, hierarchy,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, cv::Point(0, 0));
cv::Mat blank = cv::Mat::zeros(frame.size(), CV_8UC3);
cv::RNG rng;
std::vector<cv::Point2i>::iterator it = std::max_element(contours.begin(), contours.end(),
[](const std::vector<cv::Point2i>& p1,
const std::vector<cv::Point2i>& p2)
{ return p1.size()< p2.size(); });
std::vector<std::vector<cv::Point2i> > contourV;
contourV.push_back(it);
想知道哪里出了问题以及如何改正
您正在使用
类型的对象
std::vector<std::vector <cv::Point2i>> contours;
在std::max_element
算法中
因此迭代器应对应于该容器。即
std::vector<std::vector <cv::Point2i>>::iterator it = std::max_element( /*...*/ );
或者写起来更简单
auto it = std::max_element(contours.begin(), contours.end(),
[](const std::vector<cv::Point2i>& p1,
const std::vector<cv::Point2i>& p2)
{ return p1.size()< p2.size(); });
正如 @melpomene 在评论中指出的那样。
我正在尝试编写一些代码来找到 std::vector 等高线中具有最大尺寸的等高线。
我有以下错误
error: conversion from ‘__gnu_cxx::__normal_iterator<std::vector<cv::Point_<int> >*, std::vector<std::vector<cv::Point_<int> > > >’ to non-scalar type
‘std::vector<cv::Point_<int> >::iterator {aka __gnu_cxx::__normal_iterator<cv::Point_<int>*, std::vector<cv::Point_<int> > >}’ requested
std::vector<cv::Point2i>::iterator it = std::max_element(contours.begin(), contours.end()
下面是我的代码
std::vector<std::vector <cv::Point2i>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(rImg, contours, hierarchy,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, cv::Point(0, 0));
cv::Mat blank = cv::Mat::zeros(frame.size(), CV_8UC3);
cv::RNG rng;
std::vector<cv::Point2i>::iterator it = std::max_element(contours.begin(), contours.end(),
[](const std::vector<cv::Point2i>& p1,
const std::vector<cv::Point2i>& p2)
{ return p1.size()< p2.size(); });
std::vector<std::vector<cv::Point2i> > contourV;
contourV.push_back(it);
想知道哪里出了问题以及如何改正
您正在使用
类型的对象std::vector<std::vector <cv::Point2i>> contours;
在std::max_element
算法中
因此迭代器应对应于该容器。即
std::vector<std::vector <cv::Point2i>>::iterator it = std::max_element( /*...*/ );
或者写起来更简单
auto it = std::max_element(contours.begin(), contours.end(),
[](const std::vector<cv::Point2i>& p1,
const std::vector<cv::Point2i>& p2)
{ return p1.size()< p2.size(); });
正如 @melpomene 在评论中指出的那样。