mirror of
https://github.com/opencv/opencv.git
synced 2025-07-26 07:07:37 +08:00
Merge pull request #7055 from gylns:master
This commit is contained in:
commit
ea1f885be1
@ -211,7 +211,7 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( parent_ && parent_->var >= 0.f && var >= parent_->var )
|
if( var > 0.f && parent_ && parent_->var >= 0.f && var >= parent_->var )
|
||||||
return;
|
return;
|
||||||
int xmin = INT_MAX, ymin = INT_MAX, xmax = INT_MIN, ymax = INT_MIN, j = 0;
|
int xmin = INT_MAX, ymin = INT_MAX, xmax = INT_MIN, ymax = INT_MIN, j = 0;
|
||||||
wp.msers->push_back(vector<Point>());
|
wp.msers->push_back(vector<Point>());
|
||||||
@ -270,12 +270,20 @@ public:
|
|||||||
if( !history || (history->size != size && size > 0 &&
|
if( !history || (history->size != size && size > 0 &&
|
||||||
(gray_level != history->val || force)))
|
(gray_level != history->val || force)))
|
||||||
{
|
{
|
||||||
CompHistory* h = hptr++;
|
CompHistory* h;
|
||||||
h->parent_ = 0;
|
|
||||||
h->child_ = history;
|
if (history && gray_level == history->val)
|
||||||
h->next_ = 0;
|
h = history;
|
||||||
if( history )
|
else
|
||||||
history->parent_ = h;
|
{
|
||||||
|
h = hptr++;
|
||||||
|
h->parent_ = 0;
|
||||||
|
h->child_ = history;
|
||||||
|
h->next_ = 0;
|
||||||
|
if (history)
|
||||||
|
history->parent_ = h;
|
||||||
|
}
|
||||||
|
|
||||||
h->val = gray_level;
|
h->val = gray_level;
|
||||||
h->size = size;
|
h->size = size;
|
||||||
h->head = head;
|
h->head = head;
|
||||||
@ -283,7 +291,7 @@ public:
|
|||||||
history = h;
|
history = h;
|
||||||
h->var = FLT_MAX;
|
h->var = FLT_MAX;
|
||||||
h->checked = true;
|
h->checked = true;
|
||||||
if( h->size >= wp.p.minArea )
|
if (h->size >= wp.p.minArea)
|
||||||
{
|
{
|
||||||
h->var = -1.f;
|
h->var = -1.f;
|
||||||
h->checked = false;
|
h->checked = false;
|
||||||
@ -291,7 +299,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
gray_level = new_gray_level;
|
gray_level = new_gray_level;
|
||||||
if( update && history )
|
if( update && history && gray_level != history->val )
|
||||||
history->updateTree(wp, 0, 0, final);
|
history->updateTree(wp, 0, 0, final);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,14 +307,13 @@ public:
|
|||||||
void merge( ConnectedComp* comp1, ConnectedComp* comp2,
|
void merge( ConnectedComp* comp1, ConnectedComp* comp2,
|
||||||
CompHistory*& hptr, WParams& wp )
|
CompHistory*& hptr, WParams& wp )
|
||||||
{
|
{
|
||||||
comp1->growHistory( hptr, wp, -1, false );
|
|
||||||
comp2->growHistory( hptr, wp, -1, false );
|
|
||||||
|
|
||||||
if( comp1->size < comp2->size )
|
if( comp1->size < comp2->size )
|
||||||
std::swap(comp1, comp2);
|
std::swap(comp1, comp2);
|
||||||
|
|
||||||
if( comp2->size == 0 )
|
if( comp2->size == 0 )
|
||||||
{
|
{
|
||||||
|
// only grow comp1's history
|
||||||
|
comp1->growHistory(hptr, wp, -1, false);
|
||||||
gray_level = comp1->gray_level;
|
gray_level = comp1->gray_level;
|
||||||
head = comp1->head;
|
head = comp1->head;
|
||||||
tail = comp1->tail;
|
tail = comp1->tail;
|
||||||
@ -315,21 +322,35 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CompHistory* h1 = comp1->history;
|
comp1->growHistory( hptr, wp, -1, false );
|
||||||
CompHistory* h2 = comp2->history;
|
comp2->growHistory( hptr, wp, -1, false );
|
||||||
|
|
||||||
gray_level = std::max(comp1->gray_level, comp2->gray_level);
|
if (comp1->gray_level < comp2->gray_level)
|
||||||
|
std::swap(comp1, comp2);
|
||||||
|
|
||||||
|
gray_level = comp1->gray_level;
|
||||||
history = comp1->history;
|
history = comp1->history;
|
||||||
wp.pix0[comp1->tail].setNext(comp2->head);
|
wp.pix0[comp1->tail].setNext(comp2->head);
|
||||||
|
|
||||||
head = comp1->head;
|
head = comp1->head;
|
||||||
tail = comp2->tail;
|
tail = comp2->tail;
|
||||||
size = comp1->size + comp2->size;
|
size = comp1->size + comp2->size;
|
||||||
bool keep_2nd = h2->size > wp.p.minArea;
|
|
||||||
growHistory( hptr, wp, -1, false, keep_2nd );
|
CompHistory *h1 = history->child_;
|
||||||
if( keep_2nd )
|
CompHistory *h2 = comp2->history;
|
||||||
|
if (h2->size > wp.p.minArea)
|
||||||
{
|
{
|
||||||
h1->next_ = h2;
|
// the child_'s size should be the large one
|
||||||
|
if (h1 && h1->size > h2->size)
|
||||||
|
{
|
||||||
|
h2->next_ = h1->next_;
|
||||||
|
h1->next_ = h2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
history->child_ = h2;
|
||||||
|
h2->next_ = h1;
|
||||||
|
}
|
||||||
h2->parent_ = history;
|
h2->parent_ = history;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -390,7 +411,7 @@ public:
|
|||||||
int step = cols;
|
int step = cols;
|
||||||
for( i = 1; i < rows-1; i++ )
|
for( i = 1; i < rows-1; i++ )
|
||||||
{
|
{
|
||||||
Pixel* pptr = &pixbuf[i*step + 1];
|
Pixel* pptr = &pixbuf[i*step];
|
||||||
for( j = 1; j < cols-1; j++ )
|
for( j = 1; j < cols-1; j++ )
|
||||||
{
|
{
|
||||||
pptr[j].val = 0;
|
pptr[j].val = 0;
|
||||||
|
@ -132,7 +132,7 @@ TEST(Features2d_MSER, cases)
|
|||||||
GaussianBlur(src, src, Size(5, 5), 1.5, 1.5);
|
GaussianBlur(src, src, Size(5, 5), 1.5, 1.5);
|
||||||
|
|
||||||
int minRegs = use_big_image ? 7 : 2;
|
int minRegs = use_big_image ? 7 : 2;
|
||||||
int maxRegs = use_big_image ? 1000 : 15;
|
int maxRegs = use_big_image ? 1000 : 20;
|
||||||
if( binarize && (thresh == 0 || thresh == 255) )
|
if( binarize && (thresh == 0 || thresh == 255) )
|
||||||
minRegs = maxRegs = 0;
|
minRegs = maxRegs = 0;
|
||||||
|
|
||||||
|
@ -59,11 +59,11 @@ class mser_test(NewOpenCVTests):
|
|||||||
if blur:
|
if blur:
|
||||||
src = cv2.GaussianBlur(src, (5, 5), 1.5, 1.5)
|
src = cv2.GaussianBlur(src, (5, 5), 1.5, 1.5)
|
||||||
minRegs = 7 if use_big_image else 2
|
minRegs = 7 if use_big_image else 2
|
||||||
maxRegs = 1000 if use_big_image else 15
|
maxRegs = 1000 if use_big_image else 20
|
||||||
if binarize and (thresh == 0 or thresh == 255):
|
if binarize and (thresh == 0 or thresh == 255):
|
||||||
minRegs = maxRegs = 0
|
minRegs = maxRegs = 0
|
||||||
msers, boxes = mserExtractor.detectRegions(src)
|
msers, boxes = mserExtractor.detectRegions(src)
|
||||||
nmsers = len(msers)
|
nmsers = len(msers)
|
||||||
self.assertEqual(nmsers, len(boxes))
|
self.assertEqual(nmsers, len(boxes))
|
||||||
self.assertLessEqual(minRegs, nmsers)
|
self.assertLessEqual(minRegs, nmsers)
|
||||||
self.assertGreaterEqual(maxRegs, nmsers)
|
self.assertGreaterEqual(maxRegs, nmsers)
|
||||||
|
Loading…
Reference in New Issue
Block a user