diff --git a/modules/imgproc/src/lsd.cpp b/modules/imgproc/src/lsd.cpp index 3b5b412e25..3e424a42b9 100644 --- a/modules/imgproc/src/lsd.cpp +++ b/modules/imgproc/src/lsd.cpp @@ -1076,6 +1076,10 @@ void LineSegmentDetectorImpl::drawSegments(InputOutputArray _image, InputArray l } Mat _lines = lines.getMat(); + if (_lines.empty()) + { + return; + } const int N = _lines.checkVector(4); CV_Assert(_lines.depth() == CV_32F || _lines.depth() == CV_32S); diff --git a/modules/imgproc/test/test_lsd.cpp b/modules/imgproc/test/test_lsd.cpp index 43d00b4928..5f31a15c21 100644 --- a/modules/imgproc/test/test_lsd.cpp +++ b/modules/imgproc/test/test_lsd.cpp @@ -402,4 +402,18 @@ TEST_F(Imgproc_LSD_Common, compareSegmentsVec4i) ASSERT_EQ(result2, 11); } +TEST_F(Imgproc_LSD_Common, drawSegmentsEmpty) +{ + Ptr detector = createLineSegmentDetector(LSD_REFINE_STD); + Mat1b img = Mat1b::zeros(240, 320); + + std::vector lines_4i; + detector->detect(img, lines_4i); + + Mat3b img_color = Mat3b::zeros(240, 320); + ASSERT_NO_THROW( + detector->drawSegments(img_color, lines_4i); + ); +} + }} // namespace