diff --git a/modules/core/src/persistence.cpp b/modules/core/src/persistence.cpp index 450297e963..5f07976d37 100644 --- a/modules/core/src/persistence.cpp +++ b/modules/core/src/persistence.cpp @@ -4781,7 +4781,7 @@ icvDecodeSimpleFormat( const char* dt ) int fmt_pairs[CV_FS_MAX_FMT_PAIRS], fmt_pair_count; fmt_pair_count = icvDecodeFormat( dt, fmt_pairs, CV_FS_MAX_FMT_PAIRS ); - if( fmt_pair_count != 1 || fmt_pairs[0] > 4 ) + if( fmt_pair_count != 1 || fmt_pairs[0] >= CV_CN_MAX) CV_Error( CV_StsError, "Too complex format for the matrix" ); elem_type = CV_MAKETYPE( fmt_pairs[1], fmt_pairs[0] ); diff --git a/modules/python/test/test_algorithm_rw.py b/modules/python/test/test_algorithm_rw.py index f87a261060..c925a99e7b 100644 --- a/modules/python/test/test_algorithm_rw.py +++ b/modules/python/test/test_algorithm_rw.py @@ -1,19 +1,21 @@ #!/usr/bin/env python - -''' -Algorithm serializaion test -''' +"""Algorithm serializaion test.""" +import tempfile +import os import cv2 as cv - from tests_common import NewOpenCVTests + class algorithm_rw_test(NewOpenCVTests): def test_algorithm_rw(self): + fd, fname = tempfile.mkstemp(prefix="opencv_python_algorithm_", suffix=".yml") + os.close(fd) + # some arbitrary non-default parameters gold = cv.AKAZE_create(descriptor_size=1, descriptor_channels=2, nOctaves=3, threshold=4.0) - gold.write(cv.FileStorage("params.yml", 1), "AKAZE") + gold.write(cv.FileStorage(fname, cv.FILE_STORAGE_WRITE), "AKAZE") - fs = cv.FileStorage("params.yml", 0) + fs = cv.FileStorage(fname, cv.FILE_STORAGE_READ) algorithm = cv.AKAZE_create() algorithm.read(fs.getNode("AKAZE")) @@ -21,3 +23,5 @@ class algorithm_rw_test(NewOpenCVTests): self.assertEqual(algorithm.getDescriptorChannels(), 2) self.assertEqual(algorithm.getNOctaves(), 3) self.assertEqual(algorithm.getThreshold(), 4.0) + + os.remove(fname) diff --git a/modules/python/test/test_persistence.py b/modules/python/test/test_persistence.py new file mode 100644 index 0000000000..dcfce6e975 --- /dev/null +++ b/modules/python/test/test_persistence.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +""""Core serializaion tests.""" +import tempfile +import os +import cv2 as cv +import numpy as np +from tests_common import NewOpenCVTests + + +class persistence_test(NewOpenCVTests): + def test_yml_rw(self): + fd, fname = tempfile.mkstemp(prefix="opencv_python_persistence_", suffix=".yml") + os.close(fd) + + # Writing ... + expected = np.array([[[0, 1, 2, 3, 4]]]) + fs = cv.FileStorage(fname, cv.FILE_STORAGE_WRITE) + fs.write("test", expected) + 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") + self.assertEqual(test.type(), cv.FILE_NODE_MAP) + self.assertEqual(test.isMap(), True) + actual = test.mat() + self.assertEqual(actual.shape, expected.shape) + self.assertEqual(np.array_equal(expected, actual), True) + fs.release() + + os.remove(fname)