From 3f65924c4547c4eafaba83c1befc6425876c6d9f Mon Sep 17 00:00:00 2001 From: Pavel Rojtberg Date: Tue, 17 Jul 2018 12:38:48 +0200 Subject: [PATCH] core: FileStorage - add support for writing vector with bindings (#11883) * core: FileStorage - add support for writing vector with bindings * python: extend persistence test for string sequences --- modules/core/include/opencv2/core/persistence.hpp | 4 +++- modules/core/src/persistence_cpp.cpp | 9 +++++++-- modules/python/test/test_persistence.py | 9 +++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/modules/core/include/opencv2/core/persistence.hpp b/modules/core/include/opencv2/core/persistence.hpp index 5103c7d..5b2bb84 100644 --- a/modules/core/include/opencv2/core/persistence.hpp +++ b/modules/core/include/opencv2/core/persistence.hpp @@ -444,7 +444,9 @@ public: /// @overload CV_WRAP void write(const String& name, const String& val); /// @overload - CV_WRAP void write(const String& name, InputArray val); + CV_WRAP void write(const String& name, const Mat& val); + /// @overload + CV_WRAP void write(const String& name, const std::vector& val); /** @brief Writes a comment. diff --git a/modules/core/src/persistence_cpp.cpp b/modules/core/src/persistence_cpp.cpp index ab1b1f0..29984db 100644 --- a/modules/core/src/persistence_cpp.cpp +++ b/modules/core/src/persistence_cpp.cpp @@ -194,9 +194,14 @@ void FileStorage::write( const String& name, const String& val ) *this << name << val; } -void FileStorage::write( const String& name, InputArray val ) +void FileStorage::write( const String& name, const Mat& val ) { - *this << name << val.getMat(); + *this << name << val; +} + +void FileStorage::write( const String& name, const std::vector& val ) +{ + *this << name << val; } void FileStorage::writeComment( const String& comment, bool append ) diff --git a/modules/python/test/test_persistence.py b/modules/python/test/test_persistence.py index dcfce6e..4c1ec8e 100644 --- a/modules/python/test/test_persistence.py +++ b/modules/python/test/test_persistence.py @@ -14,14 +14,17 @@ class persistence_test(NewOpenCVTests): # Writing ... expected = np.array([[[0, 1, 2, 3, 4]]]) + expected_str = ("Hello", "World", "!") fs = cv.FileStorage(fname, cv.FILE_STORAGE_WRITE) fs.write("test", expected) + fs.write("strings", expected_str) fs.release() # Reading ... fs = cv.FileStorage(fname, cv.FILE_STORAGE_READ) root = fs.getFirstTopLevelNode() self.assertEqual(root.name(), "test") + test = fs.getNode("test") self.assertEqual(test.empty(), False) self.assertEqual(test.name(), "test") @@ -30,6 +33,12 @@ class persistence_test(NewOpenCVTests): actual = test.mat() self.assertEqual(actual.shape, expected.shape) self.assertEqual(np.array_equal(expected, actual), True) + + strings = fs.getNode("strings") + self.assertEqual(strings.isSeq(), True) + self.assertEqual(strings.size(), len(expected_str)) + self.assertEqual(all(strings.at(i).isString() for i in range(strings.size())), True) + self.assertSequenceEqual([strings.at(i).string() for i in range(strings.size())], expected_str) fs.release() os.remove(fname) -- 2.7.4