opencv提供了cvGetND的方式访问Mat矩阵内的元素,但是在两个for循环遍历二维Mat元素时,调用函数访问需要不断的压栈和出栈,效率低,我们可以通过Mat结构体里的ptr指针进行访问,效率高。
#include<iostream>
#include"highgui.h"
#include"cv.h"
#include"cxcore.h"
using namespace std;
void main(int argc,char* argv[])
{
float data[18] =
{
30,60,40,60, 50,40,
67,88,55,33, 22,97,
59,69,32,46, 25,45
};
CvMat mat;
cvInitMatHeader(&mat,3,2,CV_32FC3,data);//3通道
int nChannels = 3;
for(int x=0;x<mat.rows;++x)
{
float *p = (float *)(mat.data.ptr + x*mat.step);//指向每一行的起始位置
for(int y=0;y<mat.cols;++y)
{
float value[3];
value[0] = *(p+y*nChannels);
value[1] = *(p+y*nChannels+1);
value[2] = *(p+y*nChannels+2);
cout<<value[0]<<" "<<value[1]<<" "<<value[2]<<" ";
}
cout<<endl;
}
}