opencv学习笔记——FileStorage类的数据存取操作

OpenCV的许多应用都需要使用数据的存储于读取,例如经过3D校准后的相机,需要存储校准结果矩阵,以方便下次调用该数据;基于机器学习的应用,同样需要将学习得到的参数保存等。OpenCV通过XML/YAML格式实现数据持久化。

FileStorage类

FileStorage类将各种OpenCV数据结构的数据存储为XML 或 YAML格式。同时,也可以将其他类型的数值数据存储为这两种格式。
构造函数
FileStorage类的构造函数为:

cv.FileStorage( source, flags, const string& encoding=string());
参数:

source –存储或读取数据的文件名(字符串),其扩展名(.xml 或 .yml/.yaml)决定文件格式。

flags – 操作模式,包括:

FileStorage::READ 打开文件进行读操作
FileStorage::WRITE 打开文件进行写操作
FileStorage::APPEND打开文件进行附加操作
FileStorage::MEMORY 从source读数据,或向内部缓存写入数据(由FileStorage::release返回)
encoding – 文件编码方式。目前不支持UTF-16 XML 编码,应使用 8-bit 编码。
`# -- coding:utf-8 --
import cv2 as cv
import numpy as np

if name == ‘main’:
# 创建FileStorage对象file,用于写入数据
# 读者可以尝试将文件后缀名改为.yml或.yaml
# file = cv.FileStorage(‘./data/MyFile.yml’, cv.FileStorage_WRITE)
# file = cv.FileStorage(‘./data/MyFile.yaml’, cv.FileStorage_WRITE)
file = cv.FileStorage(‘./data/MyFile.xml’, cv.FileStorage_WRITE)

# 写入数据
file.write('name', '张三')
file.write('age', 16)
file.write('date', '2019-01-01')
scores = np.array([[98, 99], [96, 97], [95, 98]])
file.write('scores', scores)

# 释放对象
file.release()

# 创建FileStorage对象file1,用于读取数据
file1 = cv.FileStorage('./data/MyFile.xml', cv.FileStorage_READ)

# 判断MyFile.xml文件是否成功打开
if file1.isOpened():
    # 读取数据
    name1 = file1.getNode('name').string()
    age1 = file1.getNode('age').real()
    date1 = file1.getNode('date').string()
    scores1 = file1.getNode('scores').mat()

    # 展示读取结果
    print('姓名:{}'.format(name1))
    print('年龄:{}'.format(age1))
    print('记录日期:{}'.format(date1))
    print('成绩单:{}'.format(scores1))
else:
    print('Can\'t open MyFile.xml.')

# 释放对象
file1.release()
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值