System information (version)
- OpenCV => :4.9:
- Operating System / Platform => :Windows 64 Bit:
- Compiler => :Visual Studio 2019:
Detailed description
https://github.com/opencv/opencv_contrib/blob/4.x/modules/ximgproc/src/fast_line_detector.cpp#L584
bool is_merged = false;
int ith = (int)segments_tmp.size() - 1;
int jth = ith - 1;
while(ith > 1 || jth > 0)
{
seg1 = segments_tmp[ith];
seg2 = segments_tmp[jth];
SEGMENT seg_merged;
is_merged = mergeSegments(seg1, seg2, seg_merged);
if(is_merged == true)
{
seg2 = seg_merged;
additionalOperationsOnSegment(src, seg2);
std::vector<SEGMENT>::iterator it = segments_tmp.begin() + ith;
*it = seg2;
segments_tmp.erase(segments_tmp.begin()+jth);
ith--;
jth = ith - 1;
}
else
{
jth--;
}
if(jth < 0) {
ith--;
jth = ith - 1;
}
}
segments_all = segments_tmp;
}
if two segs (they are on one line) in segmets_tmp, then segments_tmp.size()==2 .
the while loop will not enter , finally segments_all has still two segments , they are not merged.
Steps to reproduce
// add this before while loop
SEGMENT seg1, seg2;
seg1.x1 = 0;
seg1.y1 = 0;
seg1.x2 = 100;
seg1.y2 = 0;
seg2.x1 = 110;
seg2.y1 =0;
seg2.x2 = 250;
seg2.y2 =0;
segments_tmp.clear();
segments_tmp.push_back(seg1);
segments_tmp.push_back(seg2);
// keep the same
bool is_merged = false;
int ith = (int)segments_tmp.size() - 1;
int jth = ith - 1;
while(ith > 1 || jth > 0)
{
....
}
Issue submission checklist
About how to fix , my idea: change while condition
while(ith > 1 || jth >= 0)
{ ....
}
System information (version)
Detailed description
https://github.com/opencv/opencv_contrib/blob/4.x/modules/ximgproc/src/fast_line_detector.cpp#L584
if two segs (they are on one line) in segmets_tmp, then
segments_tmp.size()==2.the while loop will not enter , finally
segments_allhas still two segments , they are not merged.Steps to reproduce
Issue submission checklist
forum.opencv.org, Stack Overflow, etc and have not found any solution
About how to fix , my idea: change
whilecondition