OpenCV学习笔记(10)CvMat 与 STL vector 的格式转换与数据读写

用STL vector来进行数组的数据读写非常方便,可以动态调整数组大小,不过在OpenCV里使用vector时,要保存vector数组的数据,就需要转换为 CvMat 格式。
比如有一个双通道数组:

vector points[2];

可以按如下方式来保存数据:

int len = points[0].size();
CvMat* pts = cvCreateMat(2,len,CV_32FC2);
for (i=0;i<2;i++)
    for (j=0;j<len;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); 

反之,从本地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;i<2;i++)
    for (j=0;j<pts_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);
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值