diff --git a/modules/features2d/include/opencv2/features2d/features2d.hpp b/modules/features2d/include/opencv2/features2d/features2d.hpp index ced6a0f766..38ee3cb069 100644 --- a/modules/features2d/include/opencv2/features2d/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d/features2d.hpp @@ -457,6 +457,9 @@ public: */ ORB(size_t n_features = 500, const CommonParams & detector_params = CommonParams()); + /** destructor to empty the patterns */ + ~ORB(); + /** returns the descriptor size in bytes */ int descriptorSize() const; diff --git a/modules/features2d/src/orb.cpp b/modules/features2d/src/orb.cpp index 132b6bda4a..aed20c6fd4 100644 --- a/modules/features2d/src/orb.cpp +++ b/modules/features2d/src/orb.cpp @@ -470,7 +470,8 @@ ORB::ORB(size_t n_features, const CommonParams & detector_params) : { // fill the extractors and descriptors for the corresponding scales float factor = 1.0 / params_.scale_factor_ / params_.scale_factor_; - int n_desired_features_per_scale = cvRound(n_features / ((std::pow(factor, (int)params_.n_levels_) - 1) / (factor - 1))); + int n_desired_features_per_scale = cvRound(n_features / ((std::pow(factor, int(params_.n_levels_)) - 1) + / (factor - 1))); n_features_per_level_.resize(detector_params.n_levels_); for (unsigned int level = 0; level < detector_params.n_levels_; level++) { @@ -497,6 +498,15 @@ ORB::ORB(size_t n_features, const CommonParams & detector_params) : } } +/** destructor to empty the patterns */ +ORB::~ORB() +{ + for (std::vector::const_iterator pattern = patterns_.begin(), pattern_end = patterns_.end(); pattern + != pattern_end; ++pattern) + if (*pattern) + delete *pattern; +} + /** returns the descriptor size in bytes */ int ORB::descriptorSize() const {