OpenCV4.1 FileStorage的参数:BASE64的变化以及使用时候的不同

问题描述:我在OpenCV3.2处理出来一堆xml的数据,在慢慢朝OpenCV4.1转,过程中发现需要往原来的xml里面添加几个Mat,顺便测试一下读写,结果发现BASE64变了。


在OpenCV 3.2里面,使用BASE64的方式如下:
cv::FileStorage fs1t(dirs[i] + “\prepare\matchMatLFixfill.xml”, FileStorage::WRITE | FileStorage::BASE64);
相比直接WRITE,用这种方式可以使用二进制存储,能够有效减少存储文件的磁盘压力,可以看到存储的结果是:
OpenCV4.1 FileStorage的参数:BASE64的变化以及使用时候的不同_第1张图片
在OpenCV4.1用同样的方式,写的文件变成了这样:
OpenCV4.1 FileStorage的参数:BASE64的变化以及使用时候的不同_第2张图片
没有binary了。存储空间占用从50M直接跳到100:
OpenCV4.1 FileStorage的参数:BASE64的变化以及使用时候的不同_第3张图片
官方doc里的描述还是和以前一样,只是默认的编码方式不再是binary了,对比源码里的操作发现3.2的版本是这样的:
OpenCV4.1 FileStorage的参数:BASE64的变化以及使用时候的不同_第4张图片
而现在(2019-7-13)最新的版本:
OpenCV4.1 FileStorage的参数:BASE64的变化以及使用时候的不同_第5张图片
进来第一件事就是把BASE64的标志位给抹掉了????
但是其实本身还是兼容binary的编码,因为我测试直接读取之前的数据没有任何问题,可以识别binary的type_id。
所以最终,我选择用:FileStorage::APPEND

小尾巴:

应该还是有办法使用binary的编码存储xml的,因为这种编码方式依旧是支持的。

你可能感兴趣的:(OpenCV)