python3 opencv FileStorage 简单使用

版权声明:本文为博主的文章,未经博主禁止可以随意转载。 https://blog.csdn.net/ONE_SIX_MIX/article/details/84300658

虽然numpy的npz很好用,但是c++不支持,还是使用opencv的保存格式,然后再在c++与python之间交换数据比较方便

opencv 官方文档
https://docs.opencv.org/3.4.3/d4/da4/group__core__xml.html

支持 yml,xml,json三种保存格式,只需更改后辍名即可切换
还可以再附加 .gz 后辍名(例如 abc.yml.gz),自动变成压缩格式

看起来 opencv3 在 python3 环境下只能支持
numpy 浮点矩阵,numpy 整数矩阵,整数,浮点数,字符串

测试环境:python 3.6, opencv 3.4

import cv2
import numpy as np

fs = cv2.FileStorage('abc.yml', cv2.FileStorage_WRITE)
fs.write('mat1', np.random.uniform(0, 1, [2, 2]))
fs.write('mat2', np.random.randint(0, 10, [2, 2]))
fs.write('num1', 1)
fs.write('num2', 2.5)
fs.write('str1', 'abc')
fs.write('str2', '你好')
# 关闭文件
fs.release()

fs2 = cv2.FileStorage('abc.yml', cv2.FileStorage_READ)
mat1 = fs2.getNode('mat1').mat()
mat2 = fs2.getNode('mat2').mat()
num1 = fs2.getNode('num1').real()
num2 = fs2.getNode('num2').real()
str1 = fs2.getNode('str1').string()
str2 = fs2.getNode('str2').string()
# 关闭文件
fs2.release()

print(mat1)
print(mat2)
print(num1)
print(num2)
print(str1)
print(str2)

命令行打印输出

[[0.82160028 0.94376792]
 [0.84148882 0.52413562]]
[[1 9]
 [0 2]]
1.0
2.5
abc
你好

生成的abc.yml文件内容是

%YAML:1.0
---
mat1: !!opencv-matrix
   rows: 2
   cols: 2
   dt: d
   data: [ 9.1179013966120381e-01, 5.8077159274593226e-03,
       6.4881478375454160e-01, 6.4059885063541522e-01 ]
mat2: !!opencv-matrix
   rows: 2
   cols: 2
   dt: i
   data: [ 9, 3, 4, 7 ]
num1: 1
num2: 2.5000000000000000e+00
str1: abc
str2: "你好"

猜你喜欢

转载自blog.csdn.net/ONE_SIX_MIX/article/details/84300658