Check for empty vector to avoid throwing an exception in LineSegmentDetectorImpl::drawSegments() function.

This commit is contained in:
Souriya Trinh 2025-06-24 04:58:54 +02:00
parent 6ed29bdd39
commit ba70d1104f
2 changed files with 18 additions and 0 deletions

View File

@ -1076,6 +1076,10 @@ void LineSegmentDetectorImpl::drawSegments(InputOutputArray _image, InputArray l
} }
Mat _lines = lines.getMat(); Mat _lines = lines.getMat();
if (_lines.empty())
{
return;
}
const int N = _lines.checkVector(4); const int N = _lines.checkVector(4);
CV_Assert(_lines.depth() == CV_32F || _lines.depth() == CV_32S); CV_Assert(_lines.depth() == CV_32F || _lines.depth() == CV_32S);

View File

@ -402,4 +402,18 @@ TEST_F(Imgproc_LSD_Common, compareSegmentsVec4i)
ASSERT_EQ(result2, 11); ASSERT_EQ(result2, 11);
} }
TEST_F(Imgproc_LSD_Common, drawSegmentsEmpty)
{
Ptr<LineSegmentDetector> detector = createLineSegmentDetector(LSD_REFINE_STD);
Mat1b img = Mat1b::zeros(240, 320);
std::vector<Vec4i> lines_4i;
detector->detect(img, lines_4i);
Mat3b img_color = Mat3b::zeros(240, 320);
ASSERT_NO_THROW(
detector->drawSegments(img_color, lines_4i);
);
}
}} // namespace }} // namespace