01
接着来看遍历Mat空间的方式,今天介绍一种迭代器的方式。
此处的迭代器与C++中支持的迭代是一个概念,因为OpenCV本身就是用C++实现的。
02
迭代器本身抽象性比较强,所以天生具有一些优点。
使用迭代器遍历Mat空间一个典型的好处是不用关心图像的行和列,直接对迭代器指针进行索引和做相应的访问即可。这样就省去了思考如何根据行和列来寻找正确的位置所带来的麻烦。封装性进一步完善。
03
此处又到我们的代码演示环节。
auto it = mat.begin();
auto it_end = mat.end(); //C++ 11特性
for (; it != it_end; it++) {
(*it).val[0] = 0; //B
(*it).val[1] = 0; //G
(*it).val[2] = 255; //R
}
04
下面是关于代码示例的一些说明喽。
(1) auto关键字是C++11所支持的一种新特性,作用是自动推断类型,从而简化编程工作,如果不支持C++ 11,就需要将迭代器的完整类型写出,比较冗长,此处省略,如有需要,就请自行更正吧;
(2)用迭代器访问,每一个像素作为一个整体,具体的访问和改变可以类似于指针访问,通过(*)来解引用;
领取专属 10元无门槛券
私享最新 技术干货