From 02466fac6bad93a5934e27c79d5cffd0bbcac7ec Mon Sep 17 00:00:00 2001 From: Lazizbek Ergashev Date: Mon, 3 Aug 2026 13:13:36 +0500 Subject: [PATCH] features: fix MSER discarding stable regions via minDiversity (#29652) --- modules/features/src/mser.cpp | 2 +- modules/features/test/test_mser.cpp | 28 ++++++++++------------------ 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/modules/features/src/mser.cpp b/modules/features/src/mser.cpp index 9350f3dfca..10913ca1a1 100644 --- a/modules/features/src/mser.cpp +++ b/modules/features/src/mser.cpp @@ -264,7 +264,7 @@ public: if( checked ) return; checked = true; - if( size < wp.p.minArea || size > wp.p.maxArea || var < wp.p.minDiversity || var > wp.p.maxVariation ) + if( size < wp.p.minArea || size > wp.p.maxArea || var < 0.f || var > wp.p.maxVariation ) return; if( child_ ) { diff --git a/modules/features/test/test_mser.cpp b/modules/features/test/test_mser.cpp index 9f7e35dc41..5a4980d015 100644 --- a/modules/features/test/test_mser.cpp +++ b/modules/features/test/test_mser.cpp @@ -182,27 +182,19 @@ TEST(Features2d_MSER, history_update_regression) } -TEST(Features2d_MSER, bug_5630) +TEST(Features2d_MSER, default_params_regression_29652) { - String dataPath = cvtest::TS::ptr()->get_data_path() + "mser/"; - Mat img = imread(dataPath + "mser_test.png", IMREAD_GRAYSCALE); - Ptr mser = MSER::create(1, 1); - vector > mserContours; - vector boxRects; + Mat img = Mat::zeros(200, 200, CV_8U); + rectangle(img, Point(40, 40), Point(160, 160), Scalar(255), -1); + circle(img, Point(100, 100), 30, Scalar(0), -1); - // set min diversity and run detection - mser->setMinDiversity(0.1); - mser->detectRegions(img, mserContours, boxRects); - size_t originalNumberOfContours = mserContours.size(); - - // increase min diversity and run detection again - mser->setMinDiversity(0.2); - mser->detectRegions(img, mserContours, boxRects); - size_t newNumberOfContours = mserContours.size(); - - // there should be fewer regions detected with a higher min diversity - ASSERT_LT(newNumberOfContours, originalNumberOfContours); + Ptr mser = MSER::create(); + vector > regions; + vector bboxes; + mser->detectRegions(img, regions, bboxes); + ASSERT_FALSE(regions.empty()); + ASSERT_EQ(regions.size(), bboxes.size()); } }} // namespace