opencv 读写XML YML

//序列没有标签
	CvMemStorage *mem = cvCreateMemStorage(0);
	CvFileStorage *file = cvOpenFileStorage("e:\\123.yml", mem, CV_STORAGE_READ | CV_STORAGE_WRITE);
	cvStartWriteStruct(file, NULL, CV_NODE_SEQ );

	cvWriteInt(file, NULL, 123);//写入的是序列,名称都为NULL
	cvWriteReal(file, NULL, 32.0);
	cvWriteString(file, NULL, "123123");
	
	int dbData[5] = {12, 3, 0, 5, 8};
	const string strType = "i";
	cvWriteRawData(file, dbData, 5, strType.c_str());
	cvWriteComment(file, "my comment", 0);//把注释写在该行的后面

	CvFileNode *node = cvGetRootFileNode(file, 0);
	if (node != NULL){
		printf("%s\n", node->data.str.ptr);
	}

	cvEndWriteStruct(file);
	cvReleaseFileStorage(&file);
	cvReleaseMemStorage(&mem);

可以看出序列写文件没有节点

CvMemStorage *mem = cvCreateMemStorage(0);
	CvFileStorage *file = cvOpenFileStorage("e:\\123.xml", mem, CV_STORAGE_READ | CV_STORAGE_WRITE);
	cvStartWriteStruct(file, "UserInfo", CV_NODE_MAP );

	cvWriteInt(file, "Integer", 123);//写入的是序列,名称都为NULL
	cvWriteReal(file, "Real", 32.0);
	cvWriteString(file, "String", "123123");

	cvWriteComment(file, "my comment", 0);//把注释写在该行的后面
	cvEndWriteStruct(file);

	cvReleaseFileStorage(&file);
	cvReleaseMemStorage(&mem);


如果是MAP,就可以了

代码如下

CvMemStorage *mem1 = cvCreateMemStorage(0);
	CvFileStorage *file1 = cvOpenFileStorage("e:\\123.xml", mem1, CV_STORAGE_READ);

	CvStringHashNode *hashNode = cvGetHashedKey(file1, "UserInfo", strlen("UserInfo"));
	CvFileNode *node1 = cvGetFileNode(file1, NULL, hashNode);
	if (node1 != NULL){//获取根节点名称
		printf("%s\n", cvGetFileNodeName(node1));
	}

	hashNode = cvGetHashedKey(file1, "Real", strlen("Real"));
	CvFileNode *nodeReal = cvGetFileNode(file1, node1, hashNode);
	if (nodeReal != NULL){//获取子节点名称
		printf("%s\n", cvGetFileNodeName(nodeReal));
		printf("%d\n", cvReadInt(nodeReal));
	}

	hashNode = cvGetHashedKey(file1, "Integer", strlen("Integer"));
	CvFileNode *nodeInteger = cvGetFileNode(file1, node1, hashNode);
	if (nodeInteger != NULL){//获取子节点名称
		printf("%s\n", cvGetFileNodeName(nodeInteger));
		printf("%d\n", cvReadInt(nodeInteger));
	}

	hashNode = cvGetHashedKey(file1, "String", strlen("String"));
	CvFileNode *nodeString = cvGetFileNode(file1, node1, hashNode);
	if (nodeString != NULL){//获取子节点名称
		printf("%s\n", cvGetFileNodeName(nodeString));
		printf("%s\n", cvReadString(nodeString));
	}

	printf("\n");
	printf("%f\n", cvReadRealByName(file1, node1, "Real"));//根据标签名获取值
	printf("%s\n", cvReadStringByName(file1, node1, "String"));
	printf("%d\n", cvReadIntByName(file1, node1, "Integer"));


	cvReleaseFileStorage(&file1);
	cvReleaseMemStorage(&mem1);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值