《学习OpenCV(中午版)》第3章 练习8

struct my_struct {
	int value;
	CvPoint point;
	CvRect rect;
};
void write_my_struct(CvFileStoragefsconst charnamemy_structms) {
	cvWriteString(fs"name"name);
 
	cvStartWriteStruct(fs"Value"CV_NODE_SEQ);
	cvWriteInt(fs, 0, ms->value);
	cvEndWriteStruct(fs);
 
	cvStartWriteStruct(fs"Point"CV_NODE_SEQ);
	cvWriteInt(fs, 0, ms->point.x);
	cvWriteInt(fs, 0, ms->point.y);
	cvEndWriteStruct(fs);
 
	cvStartWriteStruct(fs"Rect"CV_NODE_SEQ);
	cvWriteInt(fs, 0, ms->rect.x);
	cvWriteInt(fs, 0, ms->rect.y);
	cvWriteInt(fs, 0, ms->rect.width);
	cvWriteInt(fs, 0, ms->rect.height);
	cvEndWriteStruct(fs);
 
	cvReleaseFileStorage(&fs);
}
void read_my_struct(CvFileStoragefsCvFileNodems_nodemy_structms) {
	ms->value = cvReadIntByName(fs, 0, "Value");
	
	CvSeqseq = cvGetFileNodeByName(fs, 0, "Point")->data.seq;
	ms->point = cvPoint(cvReadInt((CvFileNode*)cvGetSeqElem(seq, 0)), cvReadInt((CvFileNode*)cvGetSeqElem(seq, 1)));
	
	seq = cvGetFileNodeByName(fs, 0, "Rect")->data.seq;
	ms->rect = cvRect(
		cvReadInt((CvFileNode*)cvGetSeqElem(seq, 0)),
		cvReadInt((CvFileNode*)cvGetSeqElem(seq, 1)),
		cvReadInt((CvFileNode*)cvGetSeqElem(seq, 2)),
		cvReadInt((CvFileNode*)cvGetSeqElem(seq, 3))
		);
 
	cvReleaseFileStorage(&fs);
}
void myType8() {
	my_struct ms = {100, cvPoint(200, 200), cvRect(50, 50, 100, 100)};
	CvFileStoragefs = cvOpenFileStorage("my_struct.xml", 0, CV_STORAGE_WRITE);
	write_my_struct(fs"my_struct", &ms);
 
	my_struct ms_read;
	fs = cvOpenFileStorage("my_struct.xml", 0, CV_STORAGE_READ);
	read_my_struct(fs, 0, &ms_read);
	
	std::cout<<ms_read.value<<std::endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值