void CascadeClassifier::detectMultiScale( const Mat& image, std::vector<Rect>& objects, double scaleFactor, int minNeighbors, int flags, Size minObjectSize, Size maxObjectSize) { std::vector<int> fakeLevels; std::vector<double> fakeWeights; detectMultiScale( image, objects, fakeLevels, fakeWeights, scaleFactor, minNeighbors, flags, minObjectSize, maxObjectSize ); }
int JoinCascador::Detect(const Mat& img, vector<Rect>& rects, vector<double>& scores, \ vector<Mat_<double> >& shapes) const { vector<Rect> rects_; vector<double> scores_; vector<Mat_<double> > shapes_; detectMultiScale(*this, img, rects_, scores_, shapes_); const Config& c = Config::GetInstance(); //const double overlap = 0.3; const double overlap = c.fddb_overlap; vector<int> picked; if (c.fddb_nms) { picked = nms(rects_, scores_, overlap); } else { const int n = rects_.size(); picked.resize(n); for (int i = 0; i < n; i++) picked[i] = i; } const int n = picked.size(); rects.resize(n); scores.resize(n); shapes.resize(n); // relocate the shape points for (int i = 0; i < n; i++) { const int index = picked[i]; const Rect& rect = rects_[index]; Mat_<double>& shape = shapes_[index]; const int landmark_n = shape.cols / 2; for (int j = 0; j < landmark_n; j++) { shape(0, 2 * j) = rect.x + shape(0, 2 * j)*rect.width; shape(0, 2 * j + 1) = rect.y + shape(0, 2 * j + 1)*rect.height; } rects[i] = rect; shapes[i] = shape; scores[i] = scores_[index]; } return n; }