diff --git a/modules/objdetect/include/opencv2/objdetect/objdetect.hpp b/modules/objdetect/include/opencv2/objdetect/objdetect.hpp index bb4240f59b..fd48b32ffe 100644 --- a/modules/objdetect/include/opencv2/objdetect/objdetect.hpp +++ b/modules/objdetect/include/opencv2/objdetect/objdetect.hpp @@ -512,7 +512,7 @@ public: //! return vector of bounding boxes. Each box contains one detected object virtual void detectMultiScale(const Mat& image, const std::vector& rois, std::vector& objects, - int rejectfactor = 1); + int rejectfactor = 1) const; protected: enum { BOOST = 0 }; diff --git a/modules/objdetect/src/softcascade.cpp b/modules/objdetect/src/softcascade.cpp index dcdf2633ab..d3c5821c32 100644 --- a/modules/objdetect/src/softcascade.cpp +++ b/modules/objdetect/src/softcascade.cpp @@ -419,7 +419,6 @@ struct cv::SoftCascade::Filds float rescale(const Feature& feature, const float scaling, const float relScale, cv::Rect& scaledRect, const float threshold) const { - // float scaling = CascadeIntrinsics::getFor(feature.channel, relScale); scaledRect = feature.rect; dprintf("feature %d box %d %d %d %d\n", feature.channel, scaledRect.x, scaledRect.y, @@ -439,18 +438,13 @@ struct cv::SoftCascade::Filds float sarea = (scaledRect.width - scaledRect.x) * (scaledRect.height - scaledRect.y); - float approx = 1.f; - // if (fabs(farea - 0.f) > FLT_EPSILON && fabs(farea - 0.f) > FLT_EPSILON) - { - const float expected_new_area = farea * relScale * relScale; - approx = sarea / expected_new_area; + const float expected_new_area = farea * relScale * relScale; + float approx = sarea / expected_new_area; - dprintf(" rel areas %f %f\n", expected_new_area, sarea); - } + dprintf(" rel areas %f %f\n", expected_new_area, sarea); // compensation areas rounding - float rootThreshold = threshold * approx; - rootThreshold *= scaling; + float rootThreshold = threshold * approx * scaling; dprintf("approximation %f %f -> %f %f\n", approx, threshold, rootThreshold, scaling); @@ -715,10 +709,10 @@ bool cv::SoftCascade::load( const string& filename, const float minScale, const return true; } -// #define DEBUG_SHOW_RESULT +//#define DEBUG_SHOW_RESULT void cv::SoftCascade::detectMultiScale(const Mat& image, const std::vector& /*rois*/, - std::vector& objects, const int /*rejectfactor*/) + std::vector& objects, const int /*rejectfactor*/) const { typedef std::vector::const_iterator RIter_t; // only color images are supperted