Commit 3f65924c authored by Pavel Rojtberg's avatar Pavel Rojtberg Committed by Vadim Pisarevsky

core: FileStorage - add support for writing vector<String> with bindings (#11883)

* core: FileStorage - add support for writing vector<String> with bindings

* python: extend persistence test for string sequences
parent 5e31c82b
...@@ -444,7 +444,9 @@ public: ...@@ -444,7 +444,9 @@ public:
/// @overload /// @overload
CV_WRAP void write(const String& name, const String& val); CV_WRAP void write(const String& name, const String& val);
/// @overload /// @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<String>& val);
/** @brief Writes a comment. /** @brief Writes a comment.
......
...@@ -194,9 +194,14 @@ void FileStorage::write( const String& name, const String& val ) ...@@ -194,9 +194,14 @@ void FileStorage::write( const String& name, const String& val )
*this << name << 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<String>& val )
{
*this << name << val;
} }
void FileStorage::writeComment( const String& comment, bool append ) void FileStorage::writeComment( const String& comment, bool append )
......
...@@ -14,14 +14,17 @@ class persistence_test(NewOpenCVTests): ...@@ -14,14 +14,17 @@ class persistence_test(NewOpenCVTests):
# Writing ... # Writing ...
expected = np.array([[[0, 1, 2, 3, 4]]]) expected = np.array([[[0, 1, 2, 3, 4]]])
expected_str = ("Hello", "World", "!")
fs = cv.FileStorage(fname, cv.FILE_STORAGE_WRITE) fs = cv.FileStorage(fname, cv.FILE_STORAGE_WRITE)
fs.write("test", expected) fs.write("test", expected)
fs.write("strings", expected_str)
fs.release() fs.release()
# Reading ... # Reading ...
fs = cv.FileStorage(fname, cv.FILE_STORAGE_READ) fs = cv.FileStorage(fname, cv.FILE_STORAGE_READ)
root = fs.getFirstTopLevelNode() root = fs.getFirstTopLevelNode()
self.assertEqual(root.name(), "test") self.assertEqual(root.name(), "test")
test = fs.getNode("test") test = fs.getNode("test")
self.assertEqual(test.empty(), False) self.assertEqual(test.empty(), False)
self.assertEqual(test.name(), "test") self.assertEqual(test.name(), "test")
...@@ -30,6 +33,12 @@ class persistence_test(NewOpenCVTests): ...@@ -30,6 +33,12 @@ class persistence_test(NewOpenCVTests):
actual = test.mat() actual = test.mat()
self.assertEqual(actual.shape, expected.shape) self.assertEqual(actual.shape, expected.shape)
self.assertEqual(np.array_equal(expected, actual), True) 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() fs.release()
os.remove(fname) os.remove(fname)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment