通过指针访问矩阵数据

来源:互联网 发布:标准件网络销售 编辑:程序博客网 时间:2024/06/06 02:18
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;
}

0 0