Mat类的两种遍历比较快的方式,分别给出了按行和按列遍历,以及运行过程图。
原图:
按行遍历过程图
按列遍历过程图
代码如下:
//ptr逐行访问
1 void ptrScanX(Mat& src) 2 { 3 for (int i = 0; i < src.rows; i++) 4 { 5 uchar *p = src.ptr<uchar>(i); 6 for (int j = 0; j < src.cols; j++) 7 { 8 *(p + j)=255; 9 } 10 } 11 }
//ptr逐列访问
1 void ptrScanY(Mat& src) 2 { 3 for (int i = 0; i < src.cols; i++) 4 { 5 for (int j = 0; j < src.rows; j++) 6 { 7 uchar *p = src.ptr<uchar>(j); 8 *(p + i) = 255; 9 } 10 } 11 }
//data逐行访问
1 void dataScanX(Mat& src) 2 { 3 uchar *p = src.data; 4 for (int i = 0; i < src.rows; i++) 5 { 6 for (int j = 0; j < src.cols; j++) 7 { 8 *(p+i*src.cols + j) = 255; 9 } 10 } 11 }
//data逐列访问
1 void dataScanY(Mat& src) 2 { 3 uchar *p = src.data; 4 for (int i = 0; i < src.cols; i++) 5 { 6 for (int j = 0; j < src.rows; j++) 7 { 8 *(p + j*src.cols + i) = 255; 9 } 10 } 11 }