前面讲了opencv操作文件的一些函数,详见OpenCV文件存储结构函数CvFileStorage与文件存储器节点函数CvFileNode详解,然而文件操作不仅仅只是文件的存储,还有读写操作,opencv封装了完整的文件读写操作函数,我们可以直接使用。在读写文件之前,我们需要一些必要的函数来辅助我们实现需求。比如CvAttrList函数得到属性列表,OpenFileStorage函数打开文件存储器进行读写操作等。
CvAttrList
属性列表
typedef struct CvAttrList { const char** attr; /* NULL-指向数组对(attribute_name,attribute_value) 的空指针 */ struct CvAttrList* next; /* 指向下一个属性块的指针 */ } CvAttrList; /* 初始化构造函数CvAttrList */ inline CvAttrList cvAttrList( const char** attr=NULL, CvAttrList* next=NULL ); /* 返回值为属性值,找不到适合的属性则返回值为0(NULL)*/ const char* cvAttrValue( const CvAttrList* attr, const char* attr_name );
在当前版本的属性列表用来传递额外的参数,在使用cvWrite写入自定义数据对象时。除了对象类型说明(type_id 属性)以外,它不支持 XML 在标签内的属性(注:例如<A name=”test”></A>不支持)。
OpenFileStorage
打开文件存储器读/写数据。
CvFileStorage* cvOpenFileStorage( const char* filename, CvMemStorage* memstorage, int flags );
- filename
- 内存中的相关文件的文件名。
- memstorage
- 内存中通常存储临时数据和动态结构,例如 CvSeq 和 CvGraph。如果memstorage 为空,将建立和使用一个暂存器。
- flags
- 读/写选择器。
- CV_STORAGE_READ – 内存处于读状态。
- CV_STORAGE_WRITE – 内存处于写状态。
函数cvOpenFileStorage打开文件存储器读写数据,之后建立文件或继续使用现有的文件 。文件扩展名决定读文件的类型 : .xml 是 XML的扩展名, .yml 或 .yaml 是 YAML的扩展名。该函数的返回指针指向CvFileStorage结构。
ReleaseFileStorage
释放文件存储单元
void cvReleaseFileStorage( CvFileStorage** fs );
- fs
- 双指针指向被关闭的文件存储器。
函数cvReleaseFileStorage 关闭一个相关的文件存储器并释放所有的临时内存。只有在内存的I/O操作完成后才能关闭文件存储器。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/241777.html