github.com/kaydxh/golang@v0.0.131/pkg/gocv/cgo/third_path/opencv4/include/opencv2/flann/miniflann.hpp (about) 1 /*M/////////////////////////////////////////////////////////////////////////////////////// 2 // 3 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 4 // 5 // By downloading, copying, installing or using the software you agree to this license. 6 // If you do not agree to this license, do not download, install, 7 // copy or use the software. 8 // 9 // 10 // License Agreement 11 // For Open Source Computer Vision Library 12 // 13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. 14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved. 15 // Third party copyrights are property of their respective owners. 16 // 17 // Redistribution and use in source and binary forms, with or without modification, 18 // are permitted provided that the following conditions are met: 19 // 20 // * Redistribution's of source code must retain the above copyright notice, 21 // this list of conditions and the following disclaimer. 22 // 23 // * Redistribution's in binary form must reproduce the above copyright notice, 24 // this list of conditions and the following disclaimer in the documentation 25 // and/or other materials provided with the distribution. 26 // 27 // * The name of the copyright holders may not be used to endorse or promote products 28 // derived from this software without specific prior written permission. 29 // 30 // This software is provided by the copyright holders and contributors "as is" and 31 // any express or implied warranties, including, but not limited to, the implied 32 // warranties of merchantability and fitness for a particular purpose are disclaimed. 33 // In no event shall the Intel Corporation or contributors be liable for any direct, 34 // indirect, incidental, special, exemplary, or consequential damages 35 // (including, but not limited to, procurement of substitute goods or services; 36 // loss of use, data, or profits; or business interruption) however caused 37 // and on any theory of liability, whether in contract, strict liability, 38 // or tort (including negligence or otherwise) arising in any way out of 39 // the use of this software, even if advised of the possibility of such damage. 40 // 41 //M*/ 42 43 #ifndef OPENCV_MINIFLANN_HPP 44 #define OPENCV_MINIFLANN_HPP 45 46 //! @cond IGNORED 47 48 #include "opencv2/core.hpp" 49 #include "opencv2/flann/defines.h" 50 51 namespace cv 52 { 53 54 namespace flann 55 { 56 57 enum FlannIndexType { 58 FLANN_INDEX_TYPE_8U = CV_8U, 59 FLANN_INDEX_TYPE_8S = CV_8S, 60 FLANN_INDEX_TYPE_16U = CV_16U, 61 FLANN_INDEX_TYPE_16S = CV_16S, 62 FLANN_INDEX_TYPE_32S = CV_32S, 63 FLANN_INDEX_TYPE_32F = CV_32F, 64 FLANN_INDEX_TYPE_64F = CV_64F, 65 FLANN_INDEX_TYPE_STRING, 66 FLANN_INDEX_TYPE_BOOL, 67 FLANN_INDEX_TYPE_ALGORITHM, 68 LAST_VALUE_FLANN_INDEX_TYPE = FLANN_INDEX_TYPE_ALGORITHM 69 }; 70 71 struct CV_EXPORTS IndexParams 72 { 73 IndexParams(); 74 ~IndexParams(); 75 76 String getString(const String& key, const String& defaultVal=String()) const; 77 int getInt(const String& key, int defaultVal=-1) const; 78 double getDouble(const String& key, double defaultVal=-1) const; 79 80 void setString(const String& key, const String& value); 81 void setInt(const String& key, int value); 82 void setDouble(const String& key, double value); 83 void setFloat(const String& key, float value); 84 void setBool(const String& key, bool value); 85 void setAlgorithm(int value); 86 87 // FIXIT: replace by void write(FileStorage& fs) const + read() 88 void getAll(std::vector<String>& names, 89 std::vector<FlannIndexType>& types, 90 std::vector<String>& strValues, 91 std::vector<double>& numValues) const; 92 93 void* params; 94 95 private: 96 IndexParams(const IndexParams &); // copy disabled 97 IndexParams& operator=(const IndexParams &); // assign disabled 98 }; 99 100 struct CV_EXPORTS KDTreeIndexParams : public IndexParams 101 { 102 KDTreeIndexParams(int trees=4); 103 }; 104 105 struct CV_EXPORTS LinearIndexParams : public IndexParams 106 { 107 LinearIndexParams(); 108 }; 109 110 struct CV_EXPORTS CompositeIndexParams : public IndexParams 111 { 112 CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11, 113 cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2f ); 114 }; 115 116 struct CV_EXPORTS AutotunedIndexParams : public IndexParams 117 { 118 AutotunedIndexParams(float target_precision = 0.8f, float build_weight = 0.01f, 119 float memory_weight = 0, float sample_fraction = 0.1f); 120 }; 121 122 struct CV_EXPORTS HierarchicalClusteringIndexParams : public IndexParams 123 { 124 HierarchicalClusteringIndexParams(int branching = 32, 125 cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, int trees = 4, int leaf_size = 100 ); 126 }; 127 128 struct CV_EXPORTS KMeansIndexParams : public IndexParams 129 { 130 KMeansIndexParams(int branching = 32, int iterations = 11, 131 cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2f ); 132 }; 133 134 struct CV_EXPORTS LshIndexParams : public IndexParams 135 { 136 LshIndexParams(int table_number, int key_size, int multi_probe_level); 137 }; 138 139 struct CV_EXPORTS SavedIndexParams : public IndexParams 140 { 141 SavedIndexParams(const String& filename); 142 }; 143 144 struct CV_EXPORTS SearchParams : public IndexParams 145 { 146 SearchParams( int checks, float eps, bool sorted, bool explore_all_trees ); 147 SearchParams( int checks = 32, float eps = 0, bool sorted = true ); 148 }; 149 150 class CV_EXPORTS_W Index 151 { 152 public: 153 CV_WRAP Index(); 154 CV_WRAP Index(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2); 155 virtual ~Index(); 156 157 CV_WRAP virtual void build(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2); 158 CV_WRAP virtual void knnSearch(InputArray query, OutputArray indices, 159 OutputArray dists, int knn, const SearchParams& params=SearchParams()); 160 161 CV_WRAP virtual int radiusSearch(InputArray query, OutputArray indices, 162 OutputArray dists, double radius, int maxResults, 163 const SearchParams& params=SearchParams()); 164 165 CV_WRAP virtual void save(const String& filename) const; 166 CV_WRAP virtual bool load(InputArray features, const String& filename); 167 CV_WRAP virtual void release(); 168 CV_WRAP cvflann::flann_distance_t getDistance() const; 169 CV_WRAP cvflann::flann_algorithm_t getAlgorithm() const; 170 171 protected: 172 bool load_(const String& filename); 173 174 cvflann::flann_distance_t distType; 175 cvflann::flann_algorithm_t algo; 176 int featureType; 177 void* index; 178 Mat features_clone; // index may store features pointer internally for searching, so avoid dangling pointers: https://github.com/opencv/opencv/issues/17553 179 }; 180 181 } } // namespace cv::flann 182 183 //! @endcond 184 185 #endif