Replaced most of the usages of parallel_for with that of parallel_for_.
This should allow many algorithms to take advantage of more parallelization technologies.
This commit is contained in:
@@ -248,7 +248,7 @@ detectShadowGMM(const float* data, int nchannels, int nmodes,
|
||||
//IEEE Trans. on Pattern Analysis and Machine Intelligence, vol.26, no.5, pages 651-656, 2004
|
||||
//http://www.zoranz.net/Publications/zivkovic2004PAMI.pdf
|
||||
|
||||
struct MOG2Invoker
|
||||
struct MOG2Invoker : ParallelLoopBody
|
||||
{
|
||||
MOG2Invoker(const Mat& _src, Mat& _dst,
|
||||
GMM* _gmm, float* _mean,
|
||||
@@ -280,9 +280,9 @@ struct MOG2Invoker
|
||||
cvtfunc = src->depth() != CV_32F ? getConvertFunc(src->depth(), CV_32F) : 0;
|
||||
}
|
||||
|
||||
void operator()(const BlockedRange& range) const
|
||||
void operator()(const Range& range) const
|
||||
{
|
||||
int y0 = range.begin(), y1 = range.end();
|
||||
int y0 = range.start, y1 = range.end;
|
||||
int ncols = src->cols, nchannels = src->channels();
|
||||
AutoBuffer<float> buf(src->cols*nchannels);
|
||||
float alpha1 = 1.f - alphaT;
|
||||
@@ -562,15 +562,15 @@ void BackgroundSubtractorMOG2::operator()(InputArray _image, OutputArray _fgmask
|
||||
learningRate = learningRate >= 0 && nframes > 1 ? learningRate : 1./min( 2*nframes, history );
|
||||
CV_Assert(learningRate >= 0);
|
||||
|
||||
parallel_for(BlockedRange(0, image.rows),
|
||||
MOG2Invoker(image, fgmask,
|
||||
(GMM*)bgmodel.data,
|
||||
(float*)(bgmodel.data + sizeof(GMM)*nmixtures*image.rows*image.cols),
|
||||
bgmodelUsedModes.data, nmixtures, (float)learningRate,
|
||||
(float)varThreshold,
|
||||
backgroundRatio, varThresholdGen,
|
||||
fVarInit, fVarMin, fVarMax, float(-learningRate*fCT), fTau,
|
||||
bShadowDetection, nShadowDetection));
|
||||
parallel_for_(Range(0, image.rows),
|
||||
MOG2Invoker(image, fgmask,
|
||||
(GMM*)bgmodel.data,
|
||||
(float*)(bgmodel.data + sizeof(GMM)*nmixtures*image.rows*image.cols),
|
||||
bgmodelUsedModes.data, nmixtures, (float)learningRate,
|
||||
(float)varThreshold,
|
||||
backgroundRatio, varThresholdGen,
|
||||
fVarInit, fVarMin, fVarMax, float(-learningRate*fCT), fTau,
|
||||
bShadowDetection, nShadowDetection));
|
||||
}
|
||||
|
||||
void BackgroundSubtractorMOG2::getBackgroundImage(OutputArray backgroundImage) const
|
||||
|
@@ -156,7 +156,7 @@ cv::detail::LKTrackerInvoker::LKTrackerInvoker(
|
||||
minEigThreshold = _minEigThreshold;
|
||||
}
|
||||
|
||||
void cv::detail::LKTrackerInvoker::operator()(const BlockedRange& range) const
|
||||
void cv::detail::LKTrackerInvoker::operator()(const Range& range) const
|
||||
{
|
||||
Point2f halfWin((winSize.width-1)*0.5f, (winSize.height-1)*0.5f);
|
||||
const Mat& I = *prevImg;
|
||||
@@ -170,7 +170,7 @@ void cv::detail::LKTrackerInvoker::operator()(const BlockedRange& range) const
|
||||
Mat IWinBuf(winSize, CV_MAKETYPE(derivDepth, cn), (deriv_type*)_buf);
|
||||
Mat derivIWinBuf(winSize, CV_MAKETYPE(derivDepth, cn2), (deriv_type*)_buf + winSize.area()*cn);
|
||||
|
||||
for( int ptidx = range.begin(); ptidx < range.end(); ptidx++ )
|
||||
for( int ptidx = range.start; ptidx < range.end; ptidx++ )
|
||||
{
|
||||
Point2f prevPt = prevPts[ptidx]*(float)(1./(1 << level));
|
||||
Point2f nextPt;
|
||||
@@ -733,11 +733,11 @@ void cv::calcOpticalFlowPyrLK( InputArray _prevImg, InputArray _nextImg,
|
||||
typedef cv::detail::LKTrackerInvoker LKTrackerInvoker;
|
||||
#endif
|
||||
|
||||
parallel_for(BlockedRange(0, npoints), LKTrackerInvoker(prevPyr[level * lvlStep1], derivI,
|
||||
nextPyr[level * lvlStep2], prevPts, nextPts,
|
||||
status, err,
|
||||
winSize, criteria, level, maxLevel,
|
||||
flags, (float)minEigThreshold));
|
||||
parallel_for_(Range(0, npoints), LKTrackerInvoker(prevPyr[level * lvlStep1], derivI,
|
||||
nextPyr[level * lvlStep2], prevPts, nextPts,
|
||||
status, err,
|
||||
winSize, criteria, level, maxLevel,
|
||||
flags, (float)minEigThreshold));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -7,7 +7,7 @@ namespace detail
|
||||
|
||||
typedef short deriv_type;
|
||||
|
||||
struct LKTrackerInvoker
|
||||
struct LKTrackerInvoker : ParallelLoopBody
|
||||
{
|
||||
LKTrackerInvoker( const Mat& _prevImg, const Mat& _prevDeriv, const Mat& _nextImg,
|
||||
const Point2f* _prevPts, Point2f* _nextPts,
|
||||
@@ -15,7 +15,7 @@ namespace detail
|
||||
Size _winSize, TermCriteria _criteria,
|
||||
int _level, int _maxLevel, int _flags, float _minEigThreshold );
|
||||
|
||||
void operator()(const BlockedRange& range) const;
|
||||
void operator()(const Range& range) const;
|
||||
|
||||
const Mat* prevImg;
|
||||
const Mat* nextImg;
|
||||
|
Reference in New Issue
Block a user