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);
版权声明:本文为博主原创文章,未经博主允许不得转载。