如果你熟悉 C++的 STL 库,那一定了解迭代器(iterator)的使用。迭代器可以方便地遍历所有元素。Mat 也增加了迭代器的支持,以便于矩阵元素的遍历。下面的例程功能跟上一节的例程类似,但是由于使用了迭代器,而不是使用行数和列数来遍历,所以这儿没有了 i 和 j 变量,图像的像素值设置为一个随机数。
#include<iostream> #include"opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
Mat grayim(600,800,CV_8UC1);
Mat colorim(600,800,CV_8UC3);
//遍历所有像素,并设置像素值
MatIterator_<uchar> grayit, grayend;
for (grayit = grayim.begin<uchar>(), grayend = grayim.end<uchar>(); grayit != grayend; ++grayit)
*grayit = rand() % 255;
//遍历所有像素,并设置像素值
MatIterator_<Vec3b> colorit, colorend;
for (colorit = colorim.begin<Vec3b>(), colorend = colorim.end<Vec3b>(); colorit != colorend; ++colorit)
{
(*colorit)[0] = rand() % 255;//Blue
(*colorit)[1] = rand() % 255;//Green
(*colorit)[2] = rand() % 255;//Red
}
imshow("grayim", grayim);
imshow("colorim", colorim);
waitKey(0);
return 0;
}