From 22f42a639fdc0233a740bbad06536f32d7d99382 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Wed, 5 Mar 2014 18:48:19 +0400 Subject: [PATCH] fixed doc builder warnings; make sure the tests give reasonable results when OpenCL is not available --- modules/nonfree/doc/feature_detection.rst | 2 +- modules/nonfree/include/opencv2/nonfree/ocl.hpp | 2 +- modules/nonfree/perf/perf_surf.cpp | 29 ++++++++++++++++-------- modules/nonfree/test/test_features2d.cpp | 30 ++++++++++++++++++------- 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/modules/nonfree/doc/feature_detection.rst b/modules/nonfree/doc/feature_detection.rst index f97dec1..190c9f8 100644 --- a/modules/nonfree/doc/feature_detection.rst +++ b/modules/nonfree/doc/feature_detection.rst @@ -240,7 +240,7 @@ The class ``SURF_GPU`` uses some buffers and provides access to it. All buffers ocl::SURF_OCL ------------- -.. ocv:class:: ocl::SURF_OCL +.. ocv:class:: ocl::SURF_OCL : public Feature2D Class used for extracting Speeded Up Robust Features (SURF) from an image. :: diff --git a/modules/nonfree/include/opencv2/nonfree/ocl.hpp b/modules/nonfree/include/opencv2/nonfree/ocl.hpp index ad0c16a..5d9eb86 100644 --- a/modules/nonfree/include/opencv2/nonfree/ocl.hpp +++ b/modules/nonfree/include/opencv2/nonfree/ocl.hpp @@ -114,7 +114,7 @@ namespace cv CV_OUT vector& keypoints, OutputArray descriptors, bool useProvidedKeypoints=false) const; - + AlgorithmInfo* info() const; void releaseMemory(); diff --git a/modules/nonfree/perf/perf_surf.cpp b/modules/nonfree/perf/perf_surf.cpp index f16b348..84c21b4 100644 --- a/modules/nonfree/perf/perf_surf.cpp +++ b/modules/nonfree/perf/perf_surf.cpp @@ -13,9 +13,19 @@ typedef perf::TestBaseWithParam surf; "stitching/a3.png" #ifdef HAVE_OPENCV_OCL -typedef ocl::SURF_OCL surf_class; +static Ptr getSURF() +{ + ocl::PlatformsInfo p; + if(ocl::getOpenCLPlatforms(p) > 0) + return new ocl::SURF_OCL; + else + return new SURF; +} #else -typdef SURF surf_class; +static Ptr getSURF() +{ + return new SURF; +} #endif PERF_TEST_P(surf, detect, testing::Values(SURF_IMAGES)) @@ -28,10 +38,11 @@ PERF_TEST_P(surf, detect, testing::Values(SURF_IMAGES)) Mat mask; declare.in(frame).time(90); - surf_class detector; + Ptr detector = getSURF(); + vector points; - TEST_CYCLE() detector(frame, mask, points); + TEST_CYCLE() detector->operator()(frame, mask, points, noArray()); SANITY_CHECK_KEYPOINTS(points, 1e-3); } @@ -47,12 +58,12 @@ PERF_TEST_P(surf, extract, testing::Values(SURF_IMAGES)) Mat mask; declare.in(frame).time(90); - surf_class detector; + Ptr detector = getSURF(); vector points; vector descriptors; - detector(frame, mask, points); + detector->operator()(frame, mask, points, noArray()); - TEST_CYCLE() detector(frame, mask, points, descriptors, true); + TEST_CYCLE() detector->operator()(frame, mask, points, descriptors, true); SANITY_CHECK(descriptors, 1e-4); } @@ -67,11 +78,11 @@ PERF_TEST_P(surf, full, testing::Values(SURF_IMAGES)) Mat mask; declare.in(frame).time(90); - surf_class detector; + Ptr detector = getSURF(); vector points; vector descriptors; - TEST_CYCLE() detector(frame, mask, points, descriptors, false); + TEST_CYCLE() detector->operator()(frame, mask, points, descriptors, false); SANITY_CHECK_KEYPOINTS(points, 1e-3); SANITY_CHECK(descriptors, 1e-4); diff --git a/modules/nonfree/test/test_features2d.cpp b/modules/nonfree/test/test_features2d.cpp index 66a3593..3dfad7c 100644 --- a/modules/nonfree/test/test_features2d.cpp +++ b/modules/nonfree/test/test_features2d.cpp @@ -51,9 +51,19 @@ const string DESCRIPTOR_DIR = FEATURES2D_DIR + "/descriptor_extractors"; const string IMAGE_FILENAME = "tsukuba.png"; #ifdef HAVE_OPENCV_OCL -#define SURF_NAME "SURF_OCL" +static Ptr getSURF() +{ + ocl::PlatformsInfo p; + if(ocl::getOpenCLPlatforms(p) > 0) + return new ocl::SURF_OCL; + else + return new SURF; +} #else -#define SURF_NAME "SURF" +static Ptr getSURF() +{ + return new SURF; +} #endif /****************************************************************************************\ @@ -984,7 +994,7 @@ TEST( Features2d_Detector_SIFT, regression ) TEST( Features2d_Detector_SURF, regression ) { - CV_FeatureDetectorTest test( "detector-surf", FeatureDetector::create(SURF_NAME) ); + CV_FeatureDetectorTest test( "detector-surf", Ptr(getSURF()) ); test.safe_run(); } @@ -1001,7 +1011,7 @@ TEST( Features2d_DescriptorExtractor_SIFT, regression ) TEST( Features2d_DescriptorExtractor_SURF, regression ) { CV_DescriptorExtractorTest > test( "descriptor-surf", 0.05f, - DescriptorExtractor::create(SURF_NAME) ); + Ptr(getSURF()) ); test.safe_run(); } @@ -1042,10 +1052,10 @@ TEST(Features2d_BruteForceDescriptorMatcher_knnMatch, regression) const int sz = 100; const int k = 3; - Ptr ext = DescriptorExtractor::create(SURF_NAME); + Ptr ext = Ptr(getSURF()); ASSERT_TRUE(ext != NULL); - Ptr det = FeatureDetector::create(SURF_NAME); + Ptr det = Ptr(getSURF()); //"%YAML:1.0\nhessianThreshold: 8000.\noctaves: 3\noctaveLayers: 4\nupright: 0\n" ASSERT_TRUE(det != NULL); @@ -1102,7 +1112,11 @@ public: protected: void run(int) { - Ptr f = Algorithm::create("Feature2D." + fname); + Ptr f; + if(fname == "SURF") + f = getSURF(); + else + f = Algorithm::create("Feature2D." + fname); if(f.empty()) return; string path = string(ts->get_data_path()) + "detectors_descriptors_evaluation/planar/"; @@ -1150,7 +1164,7 @@ protected: }; TEST(Features2d_SIFTHomographyTest, regression) { CV_DetectPlanarTest test("SIFT", 80); test.safe_run(); } -TEST(Features2d_SURFHomographyTest, regression) { CV_DetectPlanarTest test(SURF_NAME, 80); test.safe_run(); } +TEST(Features2d_SURFHomographyTest, regression) { CV_DetectPlanarTest test("SURF", 80); test.safe_run(); } class FeatureDetectorUsingMaskTest : public cvtest::BaseTest { -- 2.7.4