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位
这种方法比较慢