本博文列出几种opencv遍历图像的方法~
1、通过.at<typename>(i,j)
通过image.at<uchar>(i,j):取出灰度图像中i行j列的点。
image.at<Vec3b>(i,j)[k]:取出彩色图像中i行j列第k通道的颜色点,k=[0,1,2],分别代表B,G,R。
其中uchar,Vec3b都是图像像素值的类型。
2、Mat的模板子类Mat_
OpenCV定义了一个Mat的模板子类为Mat_,它重载了operator()让我们可以更方便的取图像上的点。
Mat_<uchar> im=image;
im(i,j)来取出灰度图像中i行j列的点。
3、用指针.ptr<uchar>(k)来遍历输入图像
取出图像中第i行数据的指针:image.ptr<uchar>(i)
值得说明的是:程序中将3通道的数据转换为1通道,在建立在每一行数据元素之间在内存里是连续存储的,每个像素三通道像素按顺序存储。也就是一幅图像数据最开始的三个值,是最左上角的那像素的三个通道的值。
4、迭代器Mat_iterator方法
下面的方法可以让我们来为图像中的像素声明一个迭代器:
MatIterator_<Vec3b> it;
Mat_<Vec3b>::iterator it;
如果迭代器指向一个const图像,则可以用下面的声明:
MatConstIterator<Vec3b> it; 或者
Mat_<Vec3b>::const_iterator it;