码迷,mamicode.com
首页 > 其他好文 > 详细

通过指针访问矩阵数据

时间:2016-03-24 20:15:34      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

1、mat.data.ptr是一个数据块的起始地址的指针,是uchar型(mat是CvMat mat)

2、mat.step是一行有多少个字节

3、float* ptr=(float*)(mat.data.ptr+mat.step)可以将指针指向下一行数据的起始地址

 

#include "stdafx.h"
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"

int main(int argc, char* argv[])
{
float data[18]={10,11,12,13,14,15,16,17,18,19,10,11,12,13,14,15,16,17};

//单通道二维矩阵
printf("单通道二维矩阵:\n");
CvMat mat_2;
cvInitMatHeader(&mat_2,3,6,CV_32FC1,data);
int y,x; //y行X列
for(y=0;y<mat_2.rows;y++)
{
float* ptrs=(float*)(mat_2.data.ptr+y*mat_2.step);

for(x=0;x<mat_2.cols;x++)
{
float value=*(ptrs+x);
printf("%f ",value);
}
printf("\n");
}
printf("\n");

//双通道二维矩阵
int chanels=2; //通道数
printf("双通道二维矩阵:\n");
CvMat mat_3;
cvInitMatHeader(&mat_3,3,3,CV_32FC2,data);
for(y=0;y<mat_3.rows;y++)
{
float* ptr_s=(float*)(mat_3.data.ptr+y*mat_3.step);
for(x=0;x<mat_3.cols;x++)
{
float values[2];
values[0]=*(ptr_s+x*chanels);
values[1]=*(ptr_s+x*chanels+1);
printf("<%f %f> ",values[0],values[1]);
}
printf("\n");
}

return 0;
}

技术分享

通过指针访问矩阵数据

标签:

原文地址:http://www.cnblogs.com/-chx/p/5316695.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!