diff --git a/modules/core/include/opencv2/core/persistence.hpp b/modules/core/include/opencv2/core/persistence.hpp index 5103c7df8b..5b2bb849ff 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 ab1b1f09e8..29984dba27 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 dcfce6e975..4c1ec8ee0a 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)