From d68c392b42a408844da3eabc646a5ecbd3564251 Mon Sep 17 00:00:00 2001 From: Teng Cao Date: Mon, 7 Dec 2015 18:50:54 +0800 Subject: [PATCH] calculate innTilted only for Haar::ALL mode major time consuming part for training app is in function fillPassedSamples for negatives, this change make SetImage quicker, in a test of my own data, the total time for SetImage decrease from 9177666 to 5839263, only help for Haar feature and non Haar::ALL mode which is the most commonly case --- apps/traincascade/haarfeatures.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/traincascade/haarfeatures.cpp b/apps/traincascade/haarfeatures.cpp index a58fb45c90..2c96811da7 100644 --- a/apps/traincascade/haarfeatures.cpp +++ b/apps/traincascade/haarfeatures.cpp @@ -100,9 +100,13 @@ void CvHaarEvaluator::setImage(const Mat& img, uchar clsLabel, int idx) CV_DbgAssert( !sum.empty() && !tilted.empty() && !normfactor.empty() ); CvFeatureEvaluator::setImage( img, clsLabel, idx); Mat innSum(winSize.height + 1, winSize.width + 1, sum.type(), sum.ptr((int)idx)); - Mat innTilted(winSize.height + 1, winSize.width + 1, tilted.type(), tilted.ptr((int)idx)); Mat innSqSum; - integral(img, innSum, innSqSum, innTilted); + if (((const CvHaarFeatureParams*)featureParams)->mode == CvHaarFeatureParams::ALL) { + Mat innTilted(winSize.height + 1, winSize.width + 1, tilted.type(), tilted.ptr((int)idx)); + integral(img, innSum, innSqSum, innTilted); + } + else + integral(img, innSum, innSqSum); normfactor.ptr(0)[idx] = calcNormFactor( innSum, innSqSum ); }