From fd1f644e3972742d991057f3ac3c608f64a33f69 Mon Sep 17 00:00:00 2001 From: Maria Dimashova Date: Mon, 31 Jan 2011 16:23:26 +0000 Subject: [PATCH] fixed #772 (added empty implementation of SIFT class methods throwing exception if ARM) --- .../include/opencv2/features2d/features2d.hpp | 9 ++-- modules/features2d/src/sift.cpp | 45 ++++++++++++++++++- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/modules/features2d/include/opencv2/features2d/features2d.hpp b/modules/features2d/include/opencv2/features2d/features2d.hpp index 420f60ca28..6034cd0444 100644 --- a/modules/features2d/include/opencv2/features2d/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d/features2d.hpp @@ -326,7 +326,7 @@ public: const DescriptorParams& _descriptorParams = DescriptorParams() ); //! returns the descriptor size in floats (128) - int descriptorSize() const { return DescriptorParams::DESCRIPTOR_SIZE; } + int descriptorSize() const; //! finds the keypoints using SIFT algorithm void operator()(const Mat& img, const Mat& mask, vector& keypoints) const; @@ -337,9 +337,10 @@ public: Mat& descriptors, bool useProvidedKeypoints=false) const; - CommonParams getCommonParams () const { return commParams; } - DetectorParams getDetectorParams () const { return detectorParams; } - DescriptorParams getDescriptorParams () const { return descriptorParams; } + CommonParams getCommonParams () const; + DetectorParams getDetectorParams () const; + DescriptorParams getDescriptorParams () const; + protected: CommonParams commParams; DetectorParams detectorParams; diff --git a/modules/features2d/src/sift.cpp b/modules/features2d/src/sift.cpp index e763db2c8c..ac5e3055cf 100644 --- a/modules/features2d/src/sift.cpp +++ b/modules/features2d/src/sift.cpp @@ -56,7 +56,28 @@ #undef ARM_NO_SIFT #endif //ANDROID -#ifndef ARM_NO_SIFT +#ifdef ARM_NO_SIFT + +static inline void throw_nosift() { CV_Error(CV_StsBadFunc, "The library is compiled under ARM without SIFT support"); } + +cv::SIFT::CommonParams::CommonParams() { } +cv::SIFT::CommonParams::CommonParams( int, int, int, int ) { throw_nosift(); } +cv::SIFT::DetectorParams::DetectorParams() { throw_nosift(); } +cv::SIFT::DetectorParams::DetectorParams( double, double ) { throw_nosift(); } +cv::SIFT::DescriptorParams::DescriptorParams() { throw_nosift(); } +cv::SIFT::DescriptorParams::DescriptorParams( double, bool, bool ) { throw_nosift(); } +cv::SIFT::SIFT() { throw_nosift(); } +cv::SIFT::SIFT( double, double, int, int, int, int ) { throw_nosift(); } +cv::SIFT::SIFT( double, bool, bool, int, int, int, int ) { throw_nosift(); } +cv::SIFT::SIFT( const CommonParams&, const DetectorParams&, const DescriptorParams& ) { throw_nosift(); } +int cv::SIFT::descriptorSize() const { throw_nosift(); return 0; } +void cv::SIFT::operator()( const Mat&, const Mat&, vector& ) const { throw_nosift(); } +void cv::SIFT::operator()( const Mat&, const Mat&, vector&, Mat&, bool ) const { throw_nosift(); } +cv::SIFT::CommonParams cv::SIFT::getCommonParams() const { throw_nosift(); return cv::SIFT::CommonParams(); } +cv::SIFT::DetectorParams cv::SIFT::getDetectorParams() const { throw_nosift(); return cv::SIFT::DetectorParams(); } +cv::SIFT::DescriptorParams cv::SIFT::getDescriptorParams() const { throw_nosift(); return cv::SIFT::DescriptorParams(); } + +#else // with SIFT #include #include @@ -2048,6 +2069,26 @@ SIFT::SIFT( const CommonParams& _commParams, descriptorParams = _descriptorParams; } +int SIFT::descriptorSize() const +{ + return DescriptorParams::DESCRIPTOR_SIZE; +} + +SIFT::CommonParams SIFT::getCommonParams () const +{ + return commParams; +} + +SIFT::DetectorParams SIFT::getDetectorParams () const +{ + return detectorParams; +} + +SIFT::DescriptorParams SIFT::getDescriptorParams () const +{ + return descriptorParams; +} + inline KeyPoint vlKeypointToOcv( const VL::Sift& vlSift, const VL::Sift::Keypoint& vlKeypoint, float angle ) { float size = vlKeypoint.sigma*SIFT::DescriptorParams::GET_DEFAULT_MAGNIFICATION()*4;// 4==NBP @@ -2189,4 +2230,4 @@ void SIFT::operator()(const Mat& img, const Mat& mask, keypoints.erase( remove_if(keypoints.begin(), keypoints.end(), InvalidKeypoint()), keypoints.end()); } -#endif +#endif // ARM_NO_SIFT