首先,以下代码产生了一个segmentatin错误,我不知道为什么。
float currX;
float currY;
int id = 0;
for(;it != s.end();){
it_copy = it;
pair<float,float> p = *it;
currX = p.first;
currY = p.second;
currTresh = thresh;
while(currTresh > 0 && it_copy != s.end()){
pair<float,float> inner_p = *it_copy;
currTresh--;
if((inner_p.first-currX)<=secondThresh &&
abs(currY-inner_p.second)<=secondThresh){
group.push_back(pair<int,KeyPoint>(id,KeyPoint(Point2f(p.first,p.second),9,-1,0,0,0)));
s.erase(it_copy++);
} else {
++it_copy;
}
}
id++;
it++;
}
以下是该方案: 我尝试将一些点分组。 例如相似的点类似的坐标。例如 P1(10,5); P2(11,6); P3(11,50) 第1组(P1,P2);组2(P3)
我会意识到这一点。
set的使用带来的好处是删除了重复项,并对x和y坐标对进行了排序。
for循环应迭代整个集合。这里的迭代器&#39; it&#39;用来。 在内部while循环中,我将选择一定数量的s值,取决于tresh。 thresh和sencondThresh是10! 在while循环中,我设置了类似点被分组的条件。如果组I中的点插入将从集合中进行搜索。为了避免,同一个点位于不同的组中。 这就是线,我认为分段错误来自。
我希望你能帮助我。
答案 0 :(得分:0)
您对erase
的来电会修改s
,使it
无效。因此,在此之后您无法增加it
。
也许您打算it = it_copy;
而不是it++;
?