- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据存储
OpenCV提供了一种机制来序列化(serialize)和去序列化(de-serialize)其各种数据类型,可以从磁盘中按YAML或XML格式读/写。在第4章中,我们将专门介绍存储和调用常见的对象IplImages的函数(cvSaveImage()和cvLoadImage())。此外,第4章将讨论读/写视频的特有函数:可以从文件或者摄影机中读取数据的函数cvGrabFrame()以及写操作函数cvCreateVideoWriter()和cvWriteFrame()。本小节将侧重于一般对象的永久存储:读/写矩阵、OpenCV结构、配置与日志文件。
首先,我们从有效且简便的OpenCV矩阵的保存和读取功能函数开始。函数是cvSave()和cvLoad()。例3-15展示了如何保存和读取一个5×5的单位矩阵(对角线上是1,其余地方都是0)。
例3-15:存储和读取CvMat
CvMat?A?=?cvMat(?5,?5,?CV_32F,?the_matrix_data?); ?
?
cvSave(?my_matrix.xml,?A?); ?
.?.?. ?
//?to?load?it?then?in?some?other?program?use?… ?
CvMat*?A1?=?(CvMat*)?cvLoad(?my_matrix.xml?);?
CxCore参考手册中有整节内容都在讨论数据存储。首先要知道,在OpenCV中,一般的数据存储要先创建一个CvFileStorage结构(如例3-16)所示,该结构将内存对象存储在一个树形结构中。然后通过使用CV_STORAGE_READ参数的cvOpenFileStorage()从磁盘读取数据,创建填充该结构,也可以通过使用CV_STORAGE_WRITE的cvOpenFileStorage()创建并打开CvFileStorage写数据,而后使用适当的数据存储函数来填充它。在磁盘上,数据的存储格式为XML或者YAML。
例3-16:CvFileStorage结构,数据通过CxCore数据存储函数访问
typedef?struct?CvFileStorage ?
{ ?
????...??????//?hidden?fields ?
}?CvFileStorage;?
CvFileStorage树内部的数据是一个层次化的数据集合,包括标量、CxCore对象(矩阵、序列和图)以及用户定义的对象。
假如有一个配置文件或日志文件。配置文件告诉我们视频有多少帧(10),画面大小(320×240)并且将应用一个3×3的色彩转换矩阵。例3-17展示了如何从磁盘中调出cfg.xml文件。
例3-17:往磁盘上写一个配置文件cfg.xml
CvFileStorage*?fs?=?cvOpenFileStorage( ?
??cfg.xml, ?
??0, ?
??CV_STORAGE_WRITE ?
); ?
cvWriteInt(?fs,?frame_count,?10?); ?
cvStartWriteStruct(?fs,?frame_size,?CV_NODE_SEQ?); ?
cvWriteInt(?fs,?0,?320?); ?
cvWriteInt(?fs,?0,?200?); ?
cvEndWriteStruct(fs); ?
cvWrite(?fs,?color_cvt_matrix,?cmatrix?); ?
cvReleaseFileStorage(?fs?);?
请留意这个例子中的一些关键函数。我们可以定义一个整型变量通过cvWritelnt()向结构中写数据。我们也可以使用cvStartWriteStruct()来创建任意一个可以任选一个名称(如果无名称请输入0或NULL)的结构。这个结构有两个未命名的整型变量,使用cvEndWriteStruct()结束编写结构。如果有更多的结构体,我们用相似的方法来解决;这种结构可以进行任意深度的嵌套。最后,我们使用cvWrite()编写处色彩转换矩阵。将这个相对复杂的矩阵程序与例3-15中简单的cvSave()程序进行对比。便会发现cvSave()是cvWrite()在只保存一个矩阵时的快捷方式。当写完数据后,使用cvReleaseFileStorage()释放CvFileStorage句柄。例3-18显示了XML格式的输出内容。
例3-18:磁盘中的cfg.xml文件
?xml?version=1.0??
opencv_storage?
frame_count10/frame_count?
frame_size320?200/frame_size?
color_cvt_matrix?type_id=opencv-matrix?
?
您可能关注的文档
最近下载
- 新人教版八年级上册英语 八上unit 6 课文原文语法填空+练习 教师版.docx VIP
- 中国历史地理2014 第三讲空谷足音.pdf VIP
- 中国历史地理第四讲 江河之变2 .pdf VIP
- 北大-中国历史地理-第三讲 古代交通第三讲3.ppt VIP
- GZSMARTS_2—2018智慧园区建设与验收技术规范 2018 14页.pdf VIP
- 2016年造价工程师《造价管理》常考题(四).pdf VIP
- 压力检测仪表校验 BT200手持操作器组态设置(化工仪表检验课件).pptx
- 老旧小区改造知识课件.pptx
- 裂纹愈合热障涂层粉体材料的制备方法.pdf VIP
- 运筹学教程第五版胡运权课后习题答案.docx
原创力文档


文档评论(0)