33_OpenCV读取XML或YML文件的 cv::FileNode类

cv::FileNode通常在cv::FileStorage对象读取文件时使用,cv::FileStorage::operator>>操作符的返回值是一个cv::FileNode对象。

成功构建cv::FileNode对象之后,便可以利用它来完成许多工作。如果直接表示一个实际的对象(或者一个数字或者字符串),可以直接使用重载操作符cv::FileStorage::operator>>(),将它的值加载到对应类型的变量之中。可以使用以下形式:

	cv::Mat anArray;
	fs["anArray"] >> anArray;
	int aNumber;
	fs["someInteger"] >> aNumber;
	// 或
	int nNumber;
	nNumber = (int)fs["someInteger"];

可以使用迭代器完成对cv::FileNode的遍历。给定一个cv::FileNode对象,使用成员函数cv::FileNode::begin()和cv::FileNode::end()可以分别返回该mapping或者sequence的首元素的迭代器和末尾元素的迭代器。

该迭代器对象可以通过cv::FileNodeIterator::operator*()操作符来进行解引用操作并返回迭代器对应的位置的FileNode对象。如果该迭代器在对一个mapping进行遍历,那么返回的cv::FileNode对象将会由一个名字属性,并且可以通过cv::FileNode::name()函数进行获取。

如下是cv::FileNode的成员函数:

成员函数说明
cv::FileNode fn默认构造函数
cv::FileNode fn1(fn0)复制构造函数,从节点fn0创建节点fn1
cv::FileNode fn1(fs,node)构造函数,从C风格的CvFileStorage *指针fs和C风格的CvFileNode*指针节点创建一个C++风格的cv::FileNode对象
fn[ (string)key]命名字串(映射节点)的STL字符串或C字符串存取器,将密钥转换为适当的子结点
fn[ (const char*)key ]
fn[ (int)id ]子编号(序列节点)的访问;将ID转换为相应的子结点
fn.type()返回节点类型enum
fn.empty()确定节点是否为空
fn.isNone()确定节点是否具有None
fn.isSeq()确定节点是否是序列
fn.isMap()确定节点是否是映射
fn.isInt()确定节点是否为整数、浮点数或字符串(分别)
fn.isReal()
fn.isString()
fn.name()如果节点是映射的子结点,则返回节点名称
size_t sz = fn.size()返回序列或映射中的一些元素
(int)fn从包含整数、32位浮点数、64位浮点数或字符串(分别)的节点中提取值
(float)fn
(double)fn
(string)fn

需要注意的是cv::FileNode::type()函数,该函数的返回值为类cv::FileNode中所定义的枚举类型。可能的枚举值如下:

type()返回的枚举值说明
cv::FileNpde::NONE = 0节点类型为None
cv::FileNode::INT = 1节点包含一个整数
cv::FileNode::REAL = 2节点包含一个浮点数注释
cv::FileNode::FLOAT = 2
cv::FileNode::STR = 3节点包含一个字符串
cv::FileNode::STRING
cv::FileNode::REF = 4节点包含参考(即复合对象)
cv::FileNode::SEQ = 5节点本身是其他节点的序列
cv::FileNode::MAP = 6节点本身是其他节点的映射
cv::FileNode::FLOW = 8节点是序列或映射的紧凑表示
cv::FileNode::USER = 16节点是注册对象(例如矩阵)
cv::FileNode::EMPTY = 32节点没有赋值给它
cv::FileNode::NAMED = 64节点是映射的子结点(即它有一个名字)

具体使用可以参考上篇文章

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值