题目:(P105)

创建一个结构,结构中包含一个整数,一个CvPoint和一个 CvRect;称结构体为“my_struct”。

a. 写两个函数:void Write_my_strct(CvFileStorage* fs, const char * name, my_struct* ms) 和 void read_my_struct(CvFileStorage* fs, CvFileNode* ms_node, my_struct* ms)

b. 创建一个元素为my_struct结构体且长度为10的数组,并将数组写入磁盘和从磁盘读入内存。

解答:

#include<cv.h>
#include<highgui.h> typedef struct my_struct {
int integer;
CvPoint ptr;
CvRect rect;
}my_struct; void write_my_struct(CvFileStorage* fs, const char* name, my_struct* ms) {
cvWriteInt(fs, "integer", ms[0].integer); cvStartWriteStruct(fs, "ptr", CV_NODE_SEQ);
cvWriteInt(fs, NULL, ms[0].ptr.x);
cvWriteInt(fs, NULL, ms[0].ptr.y);
cvEndWriteStruct(fs); cvStartWriteStruct(fs, "rect", CV_NODE_SEQ);
cvWriteInt(fs, NULL, ms[0].rect.x);
cvWriteInt(fs, NULL, ms[0].rect.y);
cvWriteInt(fs, NULL, ms[0].rect.width);
cvWriteInt(fs, NULL, ms[0].rect.height);
cvEndWriteStruct(fs);
} void read_my_struct(CvFileStorage* fs, CvFileNode* ms_node, my_struct* ms) {
int integer = cvReadIntByName(fs, NULL, "integer", 5);
CvSeq* seq = cvGetFileNodeByName(fs, NULL, "ptr")->data.seq;
int ptr_x = cvReadInt((CvFileNode*)cvGetSeqElem(seq, 0));
int ptr_y = cvReadInt((CvFileNode*)cvGetSeqElem(seq, 1));
seq = cvGetFileNodeByName(fs, NULL, "rect")->data.seq;
int rect_x = cvReadInt((CvFileNode*)cvGetSeqElem(seq, 0));
int rect_y = cvReadInt((CvFileNode*)cvGetSeqElem(seq, 1));
int rect_width = cvReadInt((CvFileNode*)cvGetSeqElem(seq, 2));
int rect_height = cvReadInt((CvFileNode*)cvGetSeqElem(seq, 3));
CvPoint ptr = cvPoint(ptr_x, ptr_y);
CvRect rect = cvRect(rect_x, rect_y, rect_width, rect_height);
ms->integer = integer;
ms->ptr.x = ptr_x;
ms->ptr.y = ptr_y;
ms->rect.x = rect_x;
ms->rect.y = rect_y;
ms->rect.width = rect_width;
ms->rect.height = rect_height;
} int main(int argc, char** argv) {
my_struct ms[10] = { { 10, cvPoint(5, 5), cvRect(5, 5, 10, 10) } };
CvFileStorage* sfs = cvOpenFileStorage("E:\\cfg.xml", NULL, CV_STORAGE_WRITE);
write_my_struct(sfs, "struct", ms);
cvReleaseFileStorage(&sfs); my_struct* ms2 = (my_struct*)malloc(sizeof(my_struct));
CvFileStorage* ofs = cvOpenFileStorage("E:\\cfg.xml", NULL, CV_STORAGE_READ);
read_my_struct(ofs, NULL, ms2);
cvReleaseFileStorage(&ofs); printf("integer: %d\n", ms2->integer);
printf("ptr: (%d, %d) \n", ms->ptr.x, ms->ptr.y);
printf("rect: (%d, %d, %d, %d) \n", ms->rect.x, ms->rect.y, ms->rect.width, ms->rect.height);
getchar();
return 0;
}

《学习OpenCV》课后习题解答7的更多相关文章

  1. 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答

    今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到非常多困难,当我在网上寻找答案时却找不到,而林 ...

  2. 《学习OpenCV》课后习题解答8

    题目:(P126) 本章完整讲述了基本的输入/输出编程以及OpenCV的数据结构.下面的练习是基于前面的知识做一些应用,为后面大程序的实现提供帮助. a.创建一个程序实现以下功能:(1)从视频文件中读 ...

  3. 《学习OpenCV》课后习题解答6

    题目:(P104) 使用cvCmp()创建一个掩码.加载一个真实的图像.使用cvsplit()将图像分割成红,绿,蓝三个单通道图像. a.找到并显示绿图. b.克隆这个绿图两次(分别命名为clone1 ...

  4. 《学习OpenCV》课后习题解答5

    题目:(P104) 为一个图像创建多个图像头.读取一个大小至少为100*100的图像.另创建两个图像头并设置它们的origion,depth,nChannels和widthStep属性同之前读取的图像 ...

  5. 《学习OpenCV》课后习题解答4

    题目:(P104) 练习使用感兴趣区域(ROI).创建一个210*210的单通道图像并将其归0.在图像中使用ROI和cvSet()建立一个增长如金字塔状的数组.也就是:外部边界为0,下一个内部边界应该 ...

  6. 《学习OpenCV》课后习题解答3

    题目:(P104) 创建一个大小为100*100的三通道RGB图像.将它的元素全部置0.使用指针算法以(20,5)与(40,20)为项点绘制一个绿色平面. 解答: #include "cv. ...

  7. 《学习OpenCV》课后习题解答2

    题目:(P104) 创建一个拥有三个通道的二维字节类型矩阵,大小为100*100,并将所有值赋为0.通过函数cvPtr2D将指针指向中间的通道("绿色").以(20,5)与(40, ...

  8. 《学习OpenCV》课后习题解答9

    题目:(P126) 创建一个程序,使其读入并显示一幅图像.当用户鼠标点击图像时,获取图像对应像素的颜色值(BGR),并在图像上点击鼠标处用文本将颜色值显示出来. 解答: 本题关键是会用cvGet2D获 ...

  9. 《学习OpenCV》课后习题解答1

    题目:(P104) 下面这个练习是帮助掌握矩阵类型.创造一个三通道二维矩阵,字节类型,大小为100*100,并设置所有数值为0. a.在矩阵中使用cvCircle( CvArr* img, CvPoi ...

随机推荐

  1. JavaScript 基础(二)数组

    字符串, JavaScript 字符串就是用'' 和""括起来的字符表示. 字符字面量, \n 换行, \t 制表, \b 退格, \r 回车, \f 进纸, \\ 斜杠,\' 单 ...

  2. tomcat6添加服务

    Mysql在导入大量数据的时候就要把tomcat添加成服务 添加服务 在DOS界面下,进入Tomcat解压目录的bin目录 service.bat install

  3. JavaScript文本框焦点事件

    效果图如下: <!-- 当文本框获得焦点时候,如果文本框内容是 请输入搜索关键字 清空文本框,输入内容变黑色 --> <!-- 当文本框失去焦点时候,如果文本框无内容,则添加灰色的 ...

  4. css3新样式

    超出两行变省略号 overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-w ...

  5. 微信小程序终于审核过了

    终于,我做的微信小程序审核结束了,虽然被退回来两次,但是第三次还是审核通过了! 加油骚年,相信自己!! 有什么问题可以评论告诉我!!

  6. PHP (Yii2) 自定义业务异常类(可支持返回任意自己想要的类型数据)

    public function beforeAction($action) { return parent::beforeAction($action); } public function runA ...

  7. Hive(1)-基本概念

    一. 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能. 本 ...

  8. ruby 操作csv

    1.读取csv 文件中读取:一次读入全部(设置headers使  CSV#shift()  以CSV::Row对象返回而不是数组:使  CSV#read()  返回 CSV::Table 对象而不是数 ...

  9. semcms 网站漏洞挖掘过程与安全修复防范

    emcms是国内第一个开源外贸的网站管理系统,目前大多数的外贸网站都是用的semcms系统,该系统兼容许多浏览器,像IE,google,360极速浏览器都能非常好的兼容,官方semcms有php版本, ...

  10. 快速傅里叶变换(FFT)学习笔记(未完待续)

    目录 参考资料 FFT 吹水 例题 普通做法 更高大尚的做法 定义与一部分性质 系数表达式 点值表达式 点值相乘??? 卷积 复数 单位根 DFT IDFT 蝴蝶迭代优化 单位根求法 实现.细节与小优 ...