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