利用Mat的step[0],step[1]访问像素的行列,自定义一个宏CV_MAT_ELEM2(src,dtype,y,x),src是待访问的Mat,dtype是src的数据类型(int,float,char等),
访问像素位置是y行、x列。
宏定义如下:
#define CV_MAT_ELEM2(src,dtype,y,x) (dtype*)(src.data+src.step[0]*(y)+src.step[1]*(x) )
演示代码如下所示:
#include <iostream> #include<opencv2/opencv.hpp> using namespace cv; using namespace std; #define CV_MAT_ELEM2(src,dtype,y,x) (dtype*)(src.data+src.step[0]*y+src.step[1]*x) int main() { Mat pp=Mat(3,3,CV_32FC3,Scalar(1,2,3)); float* em;//元素指针 for(int i=0;i<pp.rows;i++) { for(int j=0;j<pp.cols;j++) { em=CV_MAT_ELEM2(pp,float,i,j); cout<<em[0]<<","<<em[1]<<","<<em[2]<<endl; } } return 0; }