1、通过成员函数at(int y, int x)访问
这种方法需要知道像素保存的格式。
(1) 这是为模板类型的函数,因为一个函数的返回类型只有在运行时才会知道。
(2)这个函数返回的是一个向量即Vector,故有下标的操作。
image.at<uchar>(j,i)= 255;
在单通道图像中,采用以上语句可以获取图像(i,j)处的灰度值(注:先行后列,一般用j表示行(rows),i表示列(cols))。如果是灰度图像的话,只需要更改一个数据就可以了。如果是rgb图像的话,就要用“[]”来获取改变那个channel的值:
image.at<cv::Vec3b>(j,i)[channel]= value;
这里的<Vec3b>代表的意思是:a vector of three 8-bit value。也可以是Vec2b,Vec4b。
调用模板类型的at()函数有时是效率不高的,因为它的返回类型每次都要由传递的一个模板参数来确定。所以当矩阵的类型已知时,如一个 uchar Matrix,可以利用Mat_类。
cv::Mat_<uchar> im2= i