《学习OpenCV》课后习题解答7
题目:(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的更多相关文章
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答
今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到非常多困难,当我在网上寻找答案时却找不到,而林 ...
- 《学习OpenCV》课后习题解答8
题目:(P126) 本章完整讲述了基本的输入/输出编程以及OpenCV的数据结构.下面的练习是基于前面的知识做一些应用,为后面大程序的实现提供帮助. a.创建一个程序实现以下功能:(1)从视频文件中读 ...
- 《学习OpenCV》课后习题解答6
题目:(P104) 使用cvCmp()创建一个掩码.加载一个真实的图像.使用cvsplit()将图像分割成红,绿,蓝三个单通道图像. a.找到并显示绿图. b.克隆这个绿图两次(分别命名为clone1 ...
- 《学习OpenCV》课后习题解答5
题目:(P104) 为一个图像创建多个图像头.读取一个大小至少为100*100的图像.另创建两个图像头并设置它们的origion,depth,nChannels和widthStep属性同之前读取的图像 ...
- 《学习OpenCV》课后习题解答4
题目:(P104) 练习使用感兴趣区域(ROI).创建一个210*210的单通道图像并将其归0.在图像中使用ROI和cvSet()建立一个增长如金字塔状的数组.也就是:外部边界为0,下一个内部边界应该 ...
- 《学习OpenCV》课后习题解答3
题目:(P104) 创建一个大小为100*100的三通道RGB图像.将它的元素全部置0.使用指针算法以(20,5)与(40,20)为项点绘制一个绿色平面. 解答: #include "cv. ...
- 《学习OpenCV》课后习题解答2
题目:(P104) 创建一个拥有三个通道的二维字节类型矩阵,大小为100*100,并将所有值赋为0.通过函数cvPtr2D将指针指向中间的通道("绿色").以(20,5)与(40, ...
- 《学习OpenCV》课后习题解答9
题目:(P126) 创建一个程序,使其读入并显示一幅图像.当用户鼠标点击图像时,获取图像对应像素的颜色值(BGR),并在图像上点击鼠标处用文本将颜色值显示出来. 解答: 本题关键是会用cvGet2D获 ...
- 《学习OpenCV》课后习题解答1
题目:(P104) 下面这个练习是帮助掌握矩阵类型.创造一个三通道二维矩阵,字节类型,大小为100*100,并设置所有数值为0. a.在矩阵中使用cvCircle( CvArr* img, CvPoi ...
随机推荐
- 【JAVA】学习笔记
对程序员来说,学习一门新的语言,最开始的代码当然是hello world!下面我们从这段代码入手,一步一步来学习Java基础知识. class Hello{ public static void ma ...
- spring mvc 拦截器(已完成)
1:ModelAndView @RequestMapping("/viewall")public ModelAndView viewAll(String name,String p ...
- ABAP术语-Lock Mode
Lock Mode 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/29/1085732.html Status that determine ...
- python 之函数
一 函数的定义:对功能和动作的封装和定义.二 函数的格式:def 函数名(形参列表): 函数名就是变量名:规则就是变量的规则 函数体(return) ret = 函数名(实参列表)三 函数的返回值:函 ...
- NFS网络文件系统详解
第1章 NFS基本概述 1.1 什么是nfs NFS是Network File System的缩写及网络文件系统. 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录. NFS系统和Wind ...
- hibernate中配置单向多对一关联,和双向一对多,双向多对多
什么是一对多,多对一? 一对多,比如你去找一个父亲的所有孩子,孩子可能有两个,三个甚至四个孩子. 这就是一对多 父亲是1 孩子是多 多对一,比如你到了两个孩子,它们都是有一个共同的父亲. 此时孩子就是 ...
- 在Liunx上搭建FTP并配置用户权限
伴随着.Net Core的开源,公司前几天上了新的Liunx服务器,我在前几篇文章中介绍了如何搭建环境以及部署.Net Core应用. 然后,今天客户和我说想自己给网站做推广,需要用FTP链接我们的服 ...
- UVA 1593 Alignment of Code(紫书习题5-1 字符串流)
You are working in a team that writes Incredibly Customizable Programming Codewriter (ICPC) which is ...
- JS 实现随机验证码功能
1.验证码 验证是网页常出现的一个验证点,所谓验证码类型有很多,下面代码只是实现一个简单的验证功能. <div> <input type = "text" id ...
- C语言RL78 serial bootloader和C#语言bootloader PC端串口通信程序
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 前段时间完成的hype ...