opencv再学习之路(七)---图像单个元素的访问

  1. RGB  图像的访问

  1)  迭代器访问

  对一个Mat 对象,创建一个 Mat::iterator 对象 iter ,通过 iter = Mat::begin() 获得首地址, Mat::end() 获得尾地址,it++ 来得到下一个像素的指向, (*it)[ ] 得到实际像素值

 1 Mat_<Vec3i>::iterator iter = outputImage.begin<Vec3i>();  
 2 Mat_<Vec3i>::iterator itend = outputImage.end<Vec3i>();  
 3       
 4     while (it != itend)  
 5     {  
 6                 //(*iter)[0]=0;  
 7                 //(*iter)[1]=0;  
 8                 //(*iter)[2]=0;  
 9                 //do something 
10         iter++;  
11     }      

  用法:(*iter)[0]代表当前像素单位的B位,(*iter)[1]代表当前像素单位的G位,(*iter)[2]代表当前像素单位的R位

  2) 动态访问

  对于一个Mat 对象,可以直接用 at() 函数来得到像素, Mat::at<Vec3b>(i,j)为一个像素点

 1 for (int i = 0; i < rowN; i++)  
 2     {  
 3         for (int j = 0; j < colNum; j++)        //这里colNum要注意,下面说明  
 4         {  
 5                         //mat.at<Vec3b>(i, j)[0]=0;   
 6                         //mat.at<Vec3b>(i, j)[1]=0;  
 7                         //mat.at<Vec3b>(i, j)[2]=0;  
 8             //do something with mat.at<Vec3b>(i, j)[0] mat.at<Vec3b>(i, j)[1] mat.at<Vec3b>(i, j)[2]  
 9         }  
10     }  

  注意:这里的colNun为图像的像素点列数,不是实际数组列数,与第一种方法相反,colNum=mat.cols;        rowN通过rowN=mat.rows;得到

  用法:mat.at<Vec3b>(i,j)[0]表示i行j列像素的B位,mat.at<Vec3b>(i,j)[1]表示i行j列像素的G位,mat.at<Vec3b>(i,j)[2]表示i行j列像素的R位

  这种方法比较慢  

原文地址:https://www.cnblogs.com/zhp218/p/8625953.html