通过指针访问矩阵数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过指针访问矩阵数据相关的知识,希望对你有一定的参考价值。

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;
}

技术分享

以上是关于通过指针访问矩阵数据的主要内容,如果未能解决你的问题,请参考以下文章

02OpenCV数据载入显示与保存

MATLAB——cell数组用法

使用指针符号从矩阵中读取数据

opencv中Mat使用

opencv中Mat使用

为啥我可以通过指针访问私有数据成员,我应该这样做吗?