- fix a memory leak
authorVincent Rabaud <no@email>
Wed, 1 Jun 2011 18:24:53 +0000 (18:24 +0000)
committerVincent Rabaud <no@email>
Wed, 1 Jun 2011 18:24:53 +0000 (18:24 +0000)
modules/features2d/include/opencv2/features2d/features2d.hpp
modules/features2d/src/orb.cpp

index ced6a0f..38ee3cb 100644 (file)
@@ -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;
 
index 132b6bd..aed20c6 100644 (file)
@@ -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<OrbPatterns*>::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
 {