mirror of
https://github.com/opencv/opencv.git
synced 2025-01-18 14:13:15 +08:00
Fixed an issue with weight assignment causing the resulting GMM weights to be unsorted in BackgroundSubtractorMOG2
This commit is contained in:
parent
1bb0c5747c
commit
a87607e3ef
@ -319,7 +319,7 @@ struct MOG2Invoker : ParallelLoopBody
|
||||
for( int mode = 0; mode < nmodes; mode++, mean_m += nchannels )
|
||||
{
|
||||
float weight = alpha1*gmm[mode].weight + prune;//need only weight if fit is found
|
||||
|
||||
int swap_count = 0;
|
||||
////
|
||||
//fit not found yet
|
||||
if( !fitsPDF )
|
||||
@ -384,6 +384,7 @@ struct MOG2Invoker : ParallelLoopBody
|
||||
if( weight < gmm[i-1].weight )
|
||||
break;
|
||||
|
||||
swap_count++;
|
||||
//swap one up
|
||||
std::swap(gmm[i], gmm[i-1]);
|
||||
for( int c = 0; c < nchannels; c++ )
|
||||
@ -401,7 +402,7 @@ struct MOG2Invoker : ParallelLoopBody
|
||||
nmodes--;
|
||||
}
|
||||
|
||||
gmm[mode].weight = weight;//update weight by the calculated value
|
||||
gmm[mode-swap_count].weight = weight;//update weight by the calculated value
|
||||
totalWeight += weight;
|
||||
}
|
||||
//go through all modes
|
||||
|
Loading…
Reference in New Issue
Block a user