Esempio n. 1
0
        public void ReadAndWrite()
        {
            const string fileName = "fs.yml";

            var sequence    = new[] { "image1.jpg", "myfi.png", "../data/baboon.jpg" };
            var map         = new { @int = 12345, @double = 3.14159, @string = "foo" };
            var mapSequence = new {
                vec2b = new Vec2b(255, 128),
                rect  = new Rect(1, 2, 3, 4),
                size  = new Size(10, 20),
                point = new Point(300, 400)
            };

            // write
            using (var fs = new FileStorage(fileName, FileStorage.Mode.Write))
            {
                fs.Add("sequence").Add("[");
                foreach (var s in sequence)
                {
                    fs.Add(s);
                }
                fs.Add("]");

                fs.Add("empty_sequence").Add("[").Add("]");

                fs.Add("map").Add("{")
                .Add("int").Add(map.@int)
                .Add("double").Add(map.@double)
                .Add("string").Add(map.@string)
                .Add("}");

                fs.Add("map_sequence").Add("[")
                .Add("{")
                .Add("vec2b").Add(mapSequence.vec2b)
                .Add("rect").Add(mapSequence.rect)
                .Add("}").Add("{")
                .Add("size").Add(mapSequence.size)
                .Add("point").Add(mapSequence.point)
                .Add("}")
                .Add("]");

                using (Mat r = Mat.Eye(3, 3, MatType.CV_64FC1))
                    using (Mat t = Mat.Ones(3, 1, MatType.CV_64FC1))
                        using (Mat lenna = Image("lenna.png"))
                        {
                            fs.Write("R", r);
                            fs.Write("T", t);
                            fs.Write("lenna", lenna);
                        }
            }

            Assert.True(File.Exists(fileName));

            // read
            using (var fs = new FileStorage(fileName, FileStorage.Mode.Read))
            {
                Assert.True(fs.IsOpened());

                // sequence
                using (var node = fs["sequence"])
                {
                    Assert.NotNull(node);
#pragma warning disable CS8602

                    Assert.Equal(FileNode.Types.Seq, node.Type);

                    // C++ style sequence reading
                    FileNodeIterator it = node.Begin(), end = node.End();
                    for (int i = 0;
                         !it.Equals(end);
                         it.MoveNext(), i++)
                    {
                        var s = it.Current.ReadString();
                        Assert.Equal(sequence[i], s);
                    }

                    // C# style
                    int j = 0;
                    foreach (var n in node)
                    {
                        var s = n.ReadString();
                        Assert.Equal(sequence[j++], s);
                    }
                }

                // empty_sequence
                using (var node = fs["empty_sequence"])
                {
                    Assert.NotNull(node);
                    Assert.Equal(FileNode.Types.Seq, node.Type);

                    var children = node.ToArray();
                    Assert.Empty(children);
                }

                // map
                using (var node = fs["map"])
                {
                    Assert.NotNull(node);
                    Assert.Equal(FileNode.Types.Map, node.Type);

                    Assert.Equal(map.@int, node["int"].ReadInt());
                    Assert.Equal(map.@double, node["double"].ReadDouble());
                    Assert.Equal(map.@string, node["string"].ReadString());
                }

                // map_sequence
                using (var node = fs["map_sequence"])
                {
                    Assert.NotNull(node);
                    Assert.Equal(FileNode.Types.Seq, node.Type);

                    using (var elem0 = node.ElementAt(0))
                        using (var elem1 = node.ElementAt(1))
                        {
                            Assert.Equal(mapSequence.vec2b, elem0["vec2b"].ReadVec2b());
                            Assert.Equal(mapSequence.rect, elem0["rect"].ReadRect());
                            Assert.Equal(mapSequence.size, elem1["size"].ReadSize());
                            Assert.Equal(mapSequence.point, elem1["point"].ReadPoint());
                        }
                }

                // mat
                using (var r = fs["R"]?.ReadMat())
                    using (var t = fs["T"]?.ReadMat())
                    {
                        testOutputHelper.WriteLine("R = {0}", r);
                        testOutputHelper.WriteLine("T = {0}", t);

                        Assert.Equal(1.0, r.Get <double>(0, 0));
                        Assert.Equal(0.0, r.Get <double>(0, 1));
                        Assert.Equal(0.0, r.Get <double>(0, 2));
                        Assert.Equal(0.0, r.Get <double>(1, 0));
                        Assert.Equal(1.0, r.Get <double>(1, 1));
                        Assert.Equal(0.0, r.Get <double>(1, 2));
                        Assert.Equal(0.0, r.Get <double>(2, 0));
                        Assert.Equal(0.0, r.Get <double>(2, 1));
                        Assert.Equal(1.0, r.Get <double>(2, 2));

                        Assert.Equal(1.0, t.Get <double>(0));
                        Assert.Equal(1.0, t.Get <double>(1));
                        Assert.Equal(1.0, t.Get <double>(2));
                    }

                using (var storedLenna = fs["lenna"]?.ReadMat())
                    using (var lenna = Image("lenna.png"))
                    {
                        Assert.NotNull(storedLenna);
#pragma warning disable CS8604
                        ImageEquals(storedLenna, lenna);
#pragma warning restore CS8604
                    }

#pragma warning restore CS8602
            }
        }
Esempio n. 2
0
        public void ReadAndWriteInMemory()
        {
            var sequence    = new[] { "image1.jpg", "myfi.png", "../data/baboon.jpg" };
            var map         = new { @int = 12345, @double = 3.14159, @string = "foo" };
            var mapSequence = new
            {
                vec2b = new Vec2b(255, 128),
                rect  = new Rect(1, 2, 3, 4),
                size  = new Size(10, 20),
                point = new Point(300, 400)
            };

            // write
            string yaml;

            using (var fs = new FileStorage("yml", FileStorage.Mode.Write | FileStorage.Mode.Memory))
            {
                fs.Add("sequence").Add("[");
                foreach (var s in sequence)
                {
                    fs.Add(s);
                }
                fs.Add("]");

                fs.Add("empty_sequence").Add("[").Add("]");

                fs.Add("map").Add("{")
                .Add("int").Add(map.@int)
                .Add("double").Add(map.@double)
                .Add("string").Add(map.@string)
                .Add("}");

                fs.Add("map_sequence").Add("[")
                .Add("{")
                .Add("vec2b").Add(mapSequence.vec2b)
                .Add("rect").Add(mapSequence.rect)
                .Add("}").Add("{")
                .Add("size").Add(mapSequence.size)
                .Add("point").Add(mapSequence.point)
                .Add("}")
                .Add("]");

                using (Mat r = Mat.Eye(3, 3, MatType.CV_64FC1))
                    using (Mat t = Mat.Ones(3, 1, MatType.CV_64FC1))
                        using (Mat lenna = Image("lenna.png"))
                        {
                            fs.Write("R", r);
                            fs.Write("T", t);
                            fs.Write("lenna", lenna);
                        }

                yaml = fs.ReleaseAndGetString();
            }

            // check truncation because of StringBuilder capacity
            Assert.EndsWith("]", yaml.TrimEnd());

            // read
            using (var fs = new FileStorage(yaml, FileStorage.Mode.Read | FileStorage.Mode.Memory))
            {
                Assert.True(fs.IsOpened());

                // sequence
                using (FileNode node = fs["sequence"])
                {
                    Assert.NotNull(node);
                    Assert.Equal(FileNode.Types.Seq, node.Type);

                    // C++ style sequence reading
                    FileNodeIterator it = node.Begin(), end = node.End();
                    for (int i = 0;
                         !it.Equals(end);
                         it.MoveNext(), i++)
                    {
                        var s = it.Current.ReadString();
                        Assert.Equal(sequence[i], s);
                    }

                    // C# style
                    int j = 0;
                    foreach (var n in node)
                    {
                        var s = n.ReadString();
                        Assert.Equal(sequence[j++], s);
                    }
                }

                // empty_sequence
                using (FileNode node = fs["empty_sequence"])
                {
                    Assert.NotNull(node);
                    Assert.Equal(FileNode.Types.Seq, node.Type);

                    var children = node.ToArray();
                    Assert.Empty(children);
                }

                // map
                using (FileNode node = fs["map"])
                {
                    Assert.NotNull(node);
                    Assert.Equal(FileNode.Types.Map, node.Type);

                    Assert.Equal(map.@int, node["int"].ReadInt());
                    Assert.Equal(map.@double, node["double"].ReadDouble());
                    Assert.Equal(map.@string, node["string"].ReadString());
                }

                // map_sequence
                using (FileNode node = fs["map_sequence"])
                {
                    Assert.NotNull(node);
                    Assert.Equal(FileNode.Types.Seq, node.Type);

                    using (var elem0 = node.ElementAt(0))
                        using (var elem1 = node.ElementAt(1))
                        {
                            Assert.Equal(mapSequence.vec2b, elem0["vec2b"].ReadVec2b());
                            Assert.Equal(mapSequence.rect, elem0["rect"].ReadRect());
                            Assert.Equal(mapSequence.size, elem1["size"].ReadSize());
                            Assert.Equal(mapSequence.point, elem1["point"].ReadPoint());
                        }
                }

                // mat
                using (Mat r = fs["R"].ReadMat())
                    using (Mat t = fs["T"].ReadMat())
                    {
                        Console.WriteLine("R = {0}", r);
                        Console.WriteLine("T = {0}", t);

                        Assert.Equal(1.0, r.Get <double>(0, 0));
                        Assert.Equal(0.0, r.Get <double>(0, 1));
                        Assert.Equal(0.0, r.Get <double>(0, 2));
                        Assert.Equal(0.0, r.Get <double>(1, 0));
                        Assert.Equal(1.0, r.Get <double>(1, 1));
                        Assert.Equal(0.0, r.Get <double>(1, 2));
                        Assert.Equal(0.0, r.Get <double>(2, 0));
                        Assert.Equal(0.0, r.Get <double>(2, 1));
                        Assert.Equal(1.0, r.Get <double>(2, 2));

                        Assert.Equal(1.0, t.Get <double>(0));
                        Assert.Equal(1.0, t.Get <double>(1));
                        Assert.Equal(1.0, t.Get <double>(2));
                    }

                using (Mat storedLenna = fs["lenna"].ReadMat())
                    using (Mat lenna = Image("lenna.png"))
                    {
                        ImageEquals(storedLenna, lenna);
                    }
            }
        }