【方法一】用指针访问像素
用指针访问像素的方法利用的是C语言中的操作符[]。这种方法最快,但是略有点抽象
void colorReduce(Mat& inputImage,Mat& outputImage,int div)
{
outputImage = inputImage.clone(); //复制实参到临时变量
int row = outputImage.rows; //行数
int col = outputImage.cols*outputImage.channels(); //列数×通道数=每一行元素的个数
//双重循环,遍历所有的像素值
for (int i = 0;i < row; i++) //行循环
{
uchar* data = outputImage.ptr<uchar>(i); //获取第i+1行的首地址
for (int j = 0;j < col;j++) //列循环
{
data[j] = data[j]/div*div+div/2;
}
}
}
【方法二】用迭代器操作像素
这种方法与STL库的用法类似,相比用指针直接访问可能出现越界问题,迭代器绝对是非常安全的方法(以下代码以3通道彩色图像为例)
void colorReduce(Mat& inputImage,Mat& outputImage,int div