FIX find_longest_line on edge case
This commit is contained in:
parent
979d5a5a09
commit
bbd5210514
1 changed files with 7 additions and 6 deletions
13
cvutils.cpp
13
cvutils.cpp
|
@ -22,8 +22,8 @@ unsigned* max2_distance(std::vector<cv::Point> hull)
|
|||
for(auto p: hull) {
|
||||
std::cout << p << " ";
|
||||
}
|
||||
#endif
|
||||
std::cout << std::endl;
|
||||
#endif
|
||||
unsigned *idx = (unsigned*) calloc(2, sizeof(int));
|
||||
double distance[2] = {0};
|
||||
for( unsigned i=0; hull.size()>i; i++ )
|
||||
|
@ -126,11 +126,11 @@ find_longest_line(std::vector<cv::Point> hull, unsigned begin, unsigned end) //t
|
|||
thisline.push_back(hull[(begin+1)%hull.size()]);
|
||||
for(unsigned i=(begin+2)%hull.size(); i!=end; i++)
|
||||
{
|
||||
assert(2<=thisline.size());
|
||||
assert(2<=thisline.size());
|
||||
if(i==hull.size()) {
|
||||
i=0;
|
||||
}
|
||||
assert(i < hull.size());
|
||||
}
|
||||
assert(i < hull.size());
|
||||
if(similar_fit(thisline, hull[i])) {
|
||||
thisline.push_back(hull[i]);
|
||||
} else { // considering if the just-finished line is the best
|
||||
|
@ -145,9 +145,10 @@ find_longest_line(std::vector<cv::Point> hull, unsigned begin, unsigned end) //t
|
|||
thisline.push_back(hull[i]);
|
||||
};
|
||||
}
|
||||
if(bestline.size()==0) { // this is the case only when the first line is the best line
|
||||
assert(0==bestdistance);
|
||||
double thisdistance = dist(thisline[0],thisline[thisline.size()-1]);
|
||||
if(thisdistance>bestdistance) { // this is relevant if the best line ends at the last point
|
||||
bestline = thisline;
|
||||
bestdistance = thisdistance;
|
||||
}
|
||||
assert(bestline.size()>=2);
|
||||
return bestline;
|
||||
|
|
Loading…
Reference in a new issue