From ed93384817e1085560939183befed79e96fb649c Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Fri, 8 Mar 2024 03:25:40 +0300 Subject: [PATCH] Fix bug in maskBoundingRect --- modules/imgproc/src/shapedescr.cpp | 12 ++++-------- modules/imgproc/test/test_boundingrect.cpp | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/modules/imgproc/src/shapedescr.cpp b/modules/imgproc/src/shapedescr.cpp index fe5664abf2..9be6038d9d 100644 --- a/modules/imgproc/src/shapedescr.cpp +++ b/modules/imgproc/src/shapedescr.cpp @@ -1056,16 +1056,12 @@ static Rect maskBoundingRect( const Mat& img ) for( ; j < offset; j++ ) if( _ptr[j] ) { + if( j < xmin ) + xmin = j; + if( j > xmax ) + xmax = j; have_nz = 1; - break; } - if( j < offset ) - { - if( j < xmin ) - xmin = j; - if( j > xmax ) - xmax = j; - } if( offset < size.width ) { xmin -= offset; diff --git a/modules/imgproc/test/test_boundingrect.cpp b/modules/imgproc/test/test_boundingrect.cpp index 52a84e5cfe..d3e5495b4f 100644 --- a/modules/imgproc/test/test_boundingrect.cpp +++ b/modules/imgproc/test/test_boundingrect.cpp @@ -140,4 +140,20 @@ void CV_BoundingRectTest::run(int) TEST (Imgproc_BoundingRect, accuracy) { CV_BoundingRectTest test; test.safe_run(); } +TEST (Imgproc_BoundingRect, bug_24217) +{ + for (int image_width = 3; image_width < 20; image_width++) + { + for (int image_height = 1; image_height < 15; image_height++) + { + cv::Rect rect(0, image_height - 1, 3, 1); + + cv::Mat image(cv::Size(image_width, image_height), CV_8UC1, cv::Scalar(0)); + image(rect) = 255; + + ASSERT_EQ(boundingRect(image), rect); + } + } +} + }} // namespace