diff --git a/modules/video/src/bgfg_gaussmix2.cpp b/modules/video/src/bgfg_gaussmix2.cpp index ddc8e64bdd..9700dfebd8 100644 --- a/modules/video/src/bgfg_gaussmix2.cpp +++ b/modules/video/src/bgfg_gaussmix2.cpp @@ -582,12 +582,12 @@ void BackgroundSubtractorMOG2::getBackgroundImage(OutputArray backgroundImage) c int firstGaussianIdx = 0; const GMM* gmm = (GMM*)bgmodel.data; const float* mean = reinterpret_cast(gmm + frameSize.width*frameSize.height*nmixtures); + std::vector meanVal(nchannels, 0.f); for(int row=0; row(row, col); - std::vector meanVal(nchannels, 0.f); float totalWeight = 0.f; for(int gaussianIdx = firstGaussianIdx; gaussianIdx < firstGaussianIdx + nmodes; gaussianIdx++) { @@ -603,17 +603,16 @@ void BackgroundSubtractorMOG2::getBackgroundImage(OutputArray backgroundImage) c break; } float invWeight = 1.f/totalWeight; - for(int chn = 0; chn < nchannels; chn++) - { - meanVal[chn] *= invWeight; - } switch(nchannels) { case 1: - meanBackground.at(row, col) = (uchar)meanVal[0]; + meanBackground.at(row, col) = (uchar)(meanVal[0] * invWeight); + meanVal[0] = 0.f; break; case 3: - meanBackground.at(row, col) = Vec3b(*reinterpret_cast(&meanVal[0])); + Vec3f& meanVec = *reinterpret_cast(&meanVal[0]); + meanBackground.at(row, col) = Vec3b(meanVec * invWeight); + meanVec = 0.f; break; } firstGaussianIdx += nmixtures;