示例#1
0
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 );
}
示例#2
0
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;
}