made flann dependency for features2d optional
authorVladislav Vinogradov <vlad.vinogradov@intel.com>
Fri, 13 Oct 2017 08:01:48 +0000 (11:01 +0300)
committerVladislav Vinogradov <vlad.vinogradov@intel.com>
Fri, 13 Oct 2017 11:59:39 +0000 (14:59 +0300)
it will allow to build features2d even if flann module is not available

modules/calib3d/src/circlesgrid.cpp
modules/calib3d/test/test_chesscorners.cpp
modules/features2d/CMakeLists.txt
modules/features2d/include/opencv2/features2d.hpp
modules/features2d/src/matchers.cpp
modules/features2d/test/test_matchers_algorithmic.cpp
modules/features2d/test/test_nearestneighbors.cpp
modules/stitching/CMakeLists.txt

index b55101a..5a787a7 100644 (file)
@@ -392,6 +392,12 @@ void CirclesGridClusterFinder::rectifyPatternPoints(const std::vector<cv::Point2
 
 void CirclesGridClusterFinder::parsePatternPoints(const std::vector<cv::Point2f> &patternPoints, const std::vector<cv::Point2f> &rectifiedPatternPoints, std::vector<cv::Point2f> &centers)
 {
+#ifndef HAVE_OPENCV_FLANN
+  (void)patternPoints;
+  (void)rectifiedPatternPoints;
+  (void)centers;
+  CV_Error(Error::StsNotImplemented, "The desired functionality requires flann module, which was disabled.");
+#else
   flann::LinearIndexParams flannIndexParams;
   flann::Index flannIndex(Mat(rectifiedPatternPoints).reshape(1), flannIndexParams);
 
@@ -425,6 +431,7 @@ void CirclesGridClusterFinder::parsePatternPoints(const std::vector<cv::Point2f>
       }
     }
   }
+#endif
 }
 
 Graph::Graph(size_t n)
index 64a2d69..0627928 100644 (file)
@@ -468,6 +468,8 @@ bool CV_ChessboardDetectorTest::checkByGenerator()
 TEST(Calib3d_ChessboardDetector, accuracy) {  CV_ChessboardDetectorTest test( CHESSBOARD ); test.safe_run(); }
 TEST(Calib3d_CirclesPatternDetector, accuracy) { CV_ChessboardDetectorTest test( CIRCLES_GRID ); test.safe_run(); }
 TEST(Calib3d_AsymmetricCirclesPatternDetector, accuracy) { CV_ChessboardDetectorTest test( ASYMMETRIC_CIRCLES_GRID ); test.safe_run(); }
+#ifdef HAVE_OPENCV_FLANN
 TEST(Calib3d_AsymmetricCirclesPatternDetectorWithClustering, accuracy) { CV_ChessboardDetectorTest test( ASYMMETRIC_CIRCLES_GRID, CALIB_CB_CLUSTERING ); test.safe_run(); }
+#endif
 
 /* End of file. */
index caae24a..2a6456f 100644 (file)
@@ -1,2 +1,2 @@
 set(the_description "2D Features Framework")
-ocv_define_module(features2d opencv_imgproc opencv_flann OPTIONAL opencv_highgui WRAP java python)
+ocv_define_module(features2d opencv_imgproc OPTIONAL opencv_flann opencv_highgui WRAP java python)
index 3fe5362..0ab11b6 100644 (file)
 #ifndef OPENCV_FEATURES_2D_HPP
 #define OPENCV_FEATURES_2D_HPP
 
+#include "opencv2/opencv_modules.hpp"
 #include "opencv2/core.hpp"
+
+#ifdef HAVE_OPENCV_FLANN
 #include "opencv2/flann/miniflann.hpp"
+#endif
 
 /**
   @defgroup features2d 2D Features Framework
@@ -1099,6 +1103,7 @@ protected:
     bool crossCheck;
 };
 
+#if defined(HAVE_OPENCV_FLANN) || defined(CV_DOXYGEN)
 
 /** @brief Flann-based descriptor matcher.
 
@@ -1145,6 +1150,8 @@ protected:
     int addedDescCount;
 };
 
+#endif
+
 //! @} features2d_match
 
 /****************************************************************************************\
index 7600323..b5963e2 100644 (file)
@@ -1005,11 +1005,14 @@ void BFMatcher::radiusMatchImpl( InputArray _queryDescriptors, std::vector<std::
 Ptr<DescriptorMatcher> DescriptorMatcher::create( const String& descriptorMatcherType )
 {
     Ptr<DescriptorMatcher> dm;
+#ifdef HAVE_OPENCV_FLANN
     if( !descriptorMatcherType.compare( "FlannBased" ) )
     {
         dm = makePtr<FlannBasedMatcher>();
     }
-    else if( !descriptorMatcherType.compare( "BruteForce" ) ) // L2
+    else
+#endif
+    if( !descriptorMatcherType.compare( "BruteForce" ) ) // L2
     {
         dm = makePtr<BFMatcher>(int(NORM_L2)); // anonymous enums can't be template parameters
     }
@@ -1044,9 +1047,11 @@ Ptr<DescriptorMatcher> DescriptorMatcher::create(int matcherType)
 
     switch(matcherType)
     {
+#ifdef HAVE_OPENCV_FLANN
     case FLANNBASED:
         name = "FlannBased";
         break;
+#endif
     case BRUTEFORCE:
         name = "BruteForce";
         break;
@@ -1071,6 +1076,7 @@ Ptr<DescriptorMatcher> DescriptorMatcher::create(int matcherType)
 
 }
 
+#ifdef HAVE_OPENCV_FLANN
 
 /*
  * Flann based matcher
@@ -1419,4 +1425,7 @@ void FlannBasedMatcher::radiusMatchImpl( InputArray _queryDescriptors, std::vect
 
     convertToDMatches( mergedDescriptors, indices, dists, matches );
 }
+
+#endif
+
 }
index 0e3f2ff..7ad27a3 100644 (file)
@@ -536,12 +536,14 @@ TEST( Features2d_DescriptorMatcher_BruteForce, regression )
     test.safe_run();
 }
 
+#ifdef HAVE_OPENCV_FLANN
 TEST( Features2d_DescriptorMatcher_FlannBased, regression )
 {
     CV_DescriptorMatcherTest test( "descriptor-matcher-flann-based",
                                   DescriptorMatcher::create("FlannBased"), 0.04f );
     test.safe_run();
 }
+#endif
 
 TEST( Features2d_DMatch, read_write )
 {
index 84079fd..c967a30 100644 (file)
@@ -49,7 +49,9 @@
 
 using namespace std;
 using namespace cv;
+#ifdef HAVE_OPENCV_FLANN
 using namespace cv::flann;
+#endif
 
 //--------------------------------------------------------------------------------
 class NearestNeighborTest : public cvtest::BaseTest
@@ -158,6 +160,8 @@ void NearestNeighborTest::run( int /*start_from*/ ) {
 }
 
 //--------------------------------------------------------------------------------
+#ifdef HAVE_OPENCV_FLANN
+
 class CV_FlannTest : public NearestNeighborTest
 {
 public:
@@ -331,3 +335,5 @@ TEST(Features2d_FLANN_KDTree, regression) { CV_FlannKDTreeIndexTest test; test.s
 TEST(Features2d_FLANN_Composite, regression) { CV_FlannCompositeIndexTest test; test.safe_run(); }
 TEST(Features2d_FLANN_Auto, regression) { CV_FlannAutotunedIndexTest test; test.safe_run(); }
 TEST(Features2d_FLANN_Saved, regression) { CV_FlannSavedIndexTest test; test.safe_run(); }
+
+#endif
index 7dfdd08..4955f9f 100644 (file)
@@ -8,6 +8,6 @@ set(STITCHING_CONTRIB_DEPS "opencv_xfeatures2d")
 if(BUILD_SHARED_LIBS AND BUILD_opencv_world AND OPENCV_WORLD_EXCLUDE_EXTRA_MODULES)
   set(STITCHING_CONTRIB_DEPS "")
 endif()
-ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d
+ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_flann
                   OPTIONAL opencv_cudaarithm opencv_cudawarping opencv_cudafeatures2d opencv_cudalegacy ${STITCHING_CONTRIB_DEPS}
                   WRAP python)