From e09694bde8786e48fc3b332b21ea6eebea540f41 Mon Sep 17 00:00:00 2001 From: "marina.kolpakova" Date: Wed, 19 Dec 2012 08:39:06 +0400 Subject: [PATCH] integrated 128x256 scale --- modules/objdetect/src/softcascade.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/modules/objdetect/src/softcascade.cpp b/modules/objdetect/src/softcascade.cpp index 554fcb5a1b..5b2724e259 100644 --- a/modules/objdetect/src/softcascade.cpp +++ b/modules/objdetect/src/softcascade.cpp @@ -41,6 +41,7 @@ //M*/ #include "precomp.hpp" +#include namespace { @@ -56,7 +57,6 @@ struct Octave float scale; cv::Size size; - int shrinkage; static const char *const SC_OCT_SCALE; static const char *const SC_OCT_WEAKS; @@ -111,7 +111,6 @@ struct Feature static const char *const SC_F_CHANNEL; static const char *const SC_F_RECT; - }; const char *const Octave::SC_OCT_SCALE = "scale"; @@ -140,6 +139,8 @@ struct Level workRect(cv::Size(cvRound(w / (float)shrinkage),cvRound(h / (float)shrinkage))), objSize(cv::Size(cvRound(oct.size.width * relScale), cvRound(oct.size.height * relScale))) { + std::cout << "Level " << oct.scale << " " << scale << " " << shrinkage << " " << w << " " << h << std::endl; + scaling[0] = ((relScale >= 1.f)? 1.f : (0.89f * pow(relScale, 1.099f / log(2.f)))) / (relScale * relScale); scaling[1] = 1.f; scaleshift = static_cast(relScale * (1 << 16)); @@ -242,7 +243,7 @@ struct cv::SCascade::Fields const Octave& octave = *(level.octave); - int stBegin = octave.index * octave.weaks, stEnd = stBegin + ((octave.index)? 1024 : 416; + int stBegin = octave.index * octave.weaks, stEnd = stBegin + ((octave.index)? 1024 : 416); int st = stBegin; int offset = (octave.index)? -2: 0; @@ -362,7 +363,6 @@ struct cv::SCascade::Fields static const char *const SC_INTERNAL = "internalNodes"; static const char *const SC_LEAF = "leafValues"; - // only Ada Boost supported std::string stageTypeStr = (string)root[SC_STAGE_TYPE]; CV_Assert(stageTypeStr == SC_BOOST); @@ -412,7 +412,7 @@ struct cv::SCascade::Fields fns = (*st)[SC_LEAF]; inIt = fns.begin(), inIt_end = fns.end(); - int l = 0; + // int l = 0; for (; inIt != inIt_end; ++inIt) { leaves.push_back((float)(*inIt)); @@ -430,9 +430,15 @@ struct cv::SCascade::Fields feature_offset += octave.weaks * 3; ++octIndex; + + std::cout << "octaves " << octaves.size() << std::endl; + std::cout << "stages " << stages.size() << std::endl; + std::cout << "nodes " << nodes.size() << std::endl; + std::cout << "leaves " << leaves.size() << std::endl; + std::cout << "features " << features.size() << std::endl; } - shrinkage = octaves[0].shrinkage; + // exit(0); return true; } }; @@ -518,7 +524,9 @@ void cv::SCascade::detectNoRoi(const cv::Mat& image, std::vector& obj { const Level& level = *it; - if (i++ == 26) return; + if (level.octave->index != 2) continue; + + std::cout << level.origScale << std::endl; for (int dy = 0; dy < level.workRect.height; ++dy) {