diff --git a/modules/cudafilters/src/filtering.cpp b/modules/cudafilters/src/filtering.cpp index 21efde0103..d01504b2dd 100644 --- a/modules/cudafilters/src/filtering.cpp +++ b/modules/cudafilters/src/filtering.cpp @@ -1068,6 +1068,8 @@ namespace private: int windowSize; int partitions; + GpuMat devHist; + GpuMat devCoarseHist; }; MedianFilter::MedianFilter(int srcType, int _windowSize, int _partitions) : @@ -1098,10 +1100,13 @@ namespace // Note - these are hardcoded in the actual GPU kernel. Do not change these values. int histSize=256, histCoarseSize=8; - - BufferPool pool(_stream); - GpuMat devHist = pool.getBuffer(1, src.cols*histSize*partitions,CV_32SC1); - GpuMat devCoarseHist = pool.getBuffer(1,src.cols*histCoarseSize*partitions,CV_32SC1); + int devHistCols = src.cols*histSize*partitions, devCoarseHistCols = src.cols*histCoarseSize*partitions; + if(devHist.empty() || devCoarseHist.empty() || devHist.cols != devHistCols || devCoarseHist.cols != devCoarseHistCols) + { + BufferPool pool(_stream); + devHist = pool.getBuffer(1, devHistCols, CV_32SC1); + devCoarseHist = pool.getBuffer(1, devCoarseHistCols, CV_32SC1); + } devHist.setTo(0, _stream); devCoarseHist.setTo(0, _stream);