《学习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 ...
随机推荐
- MVVM、MVC框架的认识
推荐博客: https://blog.csdn.net/jia12216/article/details/55520426 https://www.cnblogs.com/sunny_z/p/7093 ...
- [Git add . ] 遇到The file will have its original line endings in your working directory 解决办法
1.在新项目中使用[ git add . ]时出现: warning: LF will be replaced by CRLF in ...... The file will have its ori ...
- python之打印九九乘法表
配置环境:python 3.6 python编辑器:pycharm 整理成代码如下: #!/usr/bin/env python #-*- coding: utf-8 -*- #九九乘法表 #分析:九 ...
- Scrapy框架的初步使用
Scrapy scrapy框架是一个非常全面的爬虫框架,可以说是爬虫界的django了,里面有相当多的组件,格式化组件item,持久化组件pipeline,爬虫组件spider 首先我们要先和djan ...
- Qt——绘图
1.涉及类 QPainter QPaintEngine QPaintDevice 作为绘图的使用者,只需要关注 QPainter 和 QPaintDevice 2.QPainter 使用 QPain ...
- 为什么我要放弃javaScript数据结构与算法(第三章)—— 栈
有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第三章 栈 栈数据结构 栈是一种遵循后进先出(LIFO)原则的有序集合.新添加的或待删除的元素都保存在栈的同一端,称为栈顶,另一 ...
- MAVEN的项目升级
今天我们来介绍一下版本依赖的问题 1.如果是admin的话,他要依赖于service的版本,则service的版本依赖于core的版本, 如果是本地编译,这我直接更新admin的就可以了,然后直接跑就 ...
- C++11中decltype的使用
The decltype type specifier yields the type of a specified expression. The decltype type specifier, ...
- codevs 1214 线段覆盖/1643 线段覆盖 3
1214 线段覆盖/1214 线段覆盖 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定x轴上的N(0< ...
- 网易云terraform实践
此文已由作者王慎为授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.terraform介绍 随着应用上云的常态化,资源栈动态管理的需求对用户也变得更加急切.资源编排(Res ...