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 }
View Code
//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 }
View Code
//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 }
View Code 
//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 }
View Code