diff --git a/modules/core/include/opencv2/core.hpp b/modules/core/include/opencv2/core.hpp index 8054d31b28..a1d196d677 100644 --- a/modules/core/include/opencv2/core.hpp +++ b/modules/core/include/opencv2/core.hpp @@ -3093,13 +3093,18 @@ public: */ virtual void write(FileStorage& fs) const { (void)fs; } + /** @brief simplified API for language bindings + * @overload + */ + CV_WRAP void write(const Ptr& fs, const String& name = String()) const; + /** @brief Reads algorithm parameters from a file storage */ - virtual void read(const FileNode& fn) { (void)fn; } + CV_WRAP virtual void read(const FileNode& fn) { (void)fn; } /** @brief Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read */ - virtual bool empty() const { return false; } + CV_WRAP virtual bool empty() const { return false; } /** @brief Reads algorithm from the file node diff --git a/modules/core/src/algorithm.cpp b/modules/core/src/algorithm.cpp index 24f4dfb8b8..556f5a7328 100644 --- a/modules/core/src/algorithm.cpp +++ b/modules/core/src/algorithm.cpp @@ -55,6 +55,19 @@ Algorithm::~Algorithm() CV_TRACE_FUNCTION(); } +void Algorithm::write(const Ptr& fs, const String& name) const +{ + CV_TRACE_FUNCTION(); + if(name.empty()) + { + write(*fs); + return; + } + *fs << name << "{"; + write(*fs); + *fs << "}"; +} + void Algorithm::save(const String& filename) const { CV_TRACE_FUNCTION(); diff --git a/modules/features2d/include/opencv2/features2d.hpp b/modules/features2d/include/opencv2/features2d.hpp index 0ab11b63a1..119782bf1e 100644 --- a/modules/features2d/include/opencv2/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d.hpp @@ -210,11 +210,15 @@ public: virtual void write( FileStorage&) const; - virtual void read( const FileNode&); + // see corresponding cv::Algorithm method + CV_WRAP virtual void read( const FileNode&); //! Return true if detector object is empty CV_WRAP virtual bool empty() const; CV_WRAP virtual String getDefaultName() const; + + // see corresponding cv::Algorithm method + CV_WRAP inline void write(const Ptr& fs, const String& name = String()) const { Algorithm::write(fs, name); } }; /** Feature detectors in OpenCV have wrappers with a common interface that enables you to easily switch @@ -985,7 +989,8 @@ public: read(fs.root()); } // Reads matcher object from a file node - virtual void read( const FileNode& ); + // see corresponding cv::Algorithm method + CV_WRAP virtual void read( const FileNode& ); // Writes matcher object to a file storage virtual void write( FileStorage& ) const; @@ -1012,6 +1017,10 @@ public: CV_WRAP static Ptr create( int matcherType ); + + // see corresponding cv::Algorithm method + CV_WRAP inline void write(const Ptr& fs, const String& name = String()) const { Algorithm::write(fs, name); } + protected: /** * Class to work with descriptors from several images as with one merged matrix.