用STL vector来进行数组的数据读写非常方便,可以动态调整数组大小,不过在OpenCV里使用vector时,要保存vector数组的数据,就需要转换为 CvMat 格式。
比如有一个双通道数组:
vector<cvpoint2d32f> points[2]; </cvpoint2d32f>
可以按如下方式来保存数据:
int len = points[0].size();
CvMat* pts = cvCreateMat(2,len,CV_32FC2);
for (i=0;i2;i++)
for (j=0;jlen;j++)
{
((float*)(pts->data.ptr + pts->step*i))[j*2] = points[i][j].x;
((float*)(pts->data.ptr + pts->step*i))[j*2+1] = points[i][j].y;
}
CvFileStorage* fs = cvOpenFileStorage( "data.xml", 0,
CV_STORAGE_WRITE);
cvWrite(fs, "points_matrix", pts);
cvReleaseFileStorage(&fs);
<!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com -->
反之,从本地xml文件中读入CvMat数组,再转换为 vector 格式,方式如下:
CvFileStorage* fs = cvOpenFileStorage( "data.xml", 0,
CV_STORAGE_READ);
CvMat* pts = (CvMat*)cvReadByName(fs, 0, "points_matrix");
CvSize pts_size = cvGetSize(pts);
points[0].resize(pts_size.width);
points[1].resize(pts_size.width);
for (i=0;i2;i++)
for (j=0;jpts_size.width;j++)
{
points[i][j].x = ((float*)(pts->data.ptr + pts->step*i))[j*2];
points[i][j].y = ((float*)(pts->data.ptr + pts->step*i))[j*2+1];
}
cvReleaseFileStorage(&fs);
<!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com -->
分享到:
相关推荐
opencv中Mat、CvMat、IplImage、IplImage*数据类型之间转换方法
Opencv学习笔记 辛苦收集希望和大家交流
爱分享、爱极客的编程怪兽--DaveBobo 博文 《【OpenCV学习笔记 005】 操作像素》 博文链接: http://blog.csdn.net/davebobo/article/details/52541612 OpenCV版本:2.4.9
这个一个很基础的opencv学习笔记,一些常会遇到的问题,在这里做了肤浅的介绍,还有很多问题没有提及,以后会陆续整理,并上传
OpenCV学习笔记(C++版OpenCV学习笔记,主要包括基础模块和DNN模块)带详细注释源码!!!
OpenCV学习笔记,(基础概念,归纳总结),相信你所选择的。
OpenCV学习笔记入门版,真正的入门级别,自己写的
学习笔记
详细介绍opencv中CvMat的具体用法,方便初学者使用
QT和Opencv图像格式转换_ qtopencv图片数组相互转化,opencv格式转换mono8 -C 代码类资源 关于QImage和Mat格式的转换
opencv常用数据之间的转换
爱分享、爱极客的编程怪兽--DaveBobo 博文 《【OpenCV学习笔记 007】使用直方图统计像素》 博文链接: http://blog.csdn.net/davebobo/article/details/52554968 OpenCV版本:2.4.9
有关学习opencv与C++过程中的一些学习笔记
OpenCV学习笔记(四)运动物体跟踪的camshift算法
爱分享、爱极客的编程怪兽--DaveBobo 博文 《【OpenCV学习笔记 013】处理视频序列》 博文链接: http://blog.csdn.net/davebobo/article/details/52677657 OpenCV版本:2.4.9
opencv的cvMat用法比较复杂,本文档以最简单的方式总结了cvMat的输出,cvMat元素的读写,cvMat元素与double型的强制转换,适合有一定opencv基础的
OpenCv学习笔记(六):使用opencv画线、矩形、椭圆、多边形线、多边形体等.pdf
Opencv现在支持与计算机视觉和机器学习有关的多种算法,并且正在日益扩展。 Opencv支持多种编程语言,例如C++, Python, Java等,并且可以再Windows , Linux , OS X , Android和IOS等不同平台上使用。基于CUDA和...
爱分享、爱极客的编程怪兽--DaveBobo 博文 《【OpenCV学习笔记 010】提取直线、轮廓及连通区域》 博文链接: http://blog.csdn.net/davebobo/article/details/52583167 OpenCV版本:2.4.9