1、获取像素的对象
通过src.at<uchar>(row,col)获取单通道像素;通过src.ar<Vec3b>(row,col)[i](i=0,1,2)获取红绿蓝三通道的像素。
//获取图像的像素
int height = src.rows;
int width = src.cols;
int channel = src.channels();
for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {
if (channel == 1) { //单通道图片
int value = src.at<uchar>(row, col);
}
else if (channel == 3) { //三通道图片
int b = src.at<Vec3b>(row, col)[0]; //蓝色通道的像素
int g = src.at<Vec3b>(row, col)[1]; //绿色通道的像素
int r = src.at<Vec3b>(row, col)[2]; //红色通道的像素
}
}
}
2、通过像素指针对像素进行处理
//通过像素指针获取像素并对其进行处理
int height = src.rows;
int width = src.cols;
int channels = src.channels();
Mat dst; //初始化dst对象
dst = Mat::zeros(src.size(), src.type());
for (int row = 0; row < height; row++) {
const uchar * pixel = src.ptr<uchar>(row); //通过指针获取src对象像素值,只能够作为右值
uchar * output = dst.ptr<uchar>(row); //用来保存经过处理之后的像素值,可以作为左值
for (int col = 0; col < width; col++) {
output[col] = saturate_cast<uchar>(pixel[col] * 5 + 10); //将修改之后的像素值保存在dst中
}
}