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