OpenCV学习之三:使用迭代器遍历图像
2014-05-10 19:34
197 查看
2.迭代法 The iterator (safe) method
在高性能法(the efficient way)中,我们可以通过遍历正确的 uchar 域并跳过行与行之间可能的空缺-你必须自己来确认是否有空缺,来实现图像扫描,迭代法则被认为是一种以更安全的方式来实现这一功能。在迭代法中,你所需要做的仅仅是获得图像矩阵的begin和end,然后增加迭代直至从begin到end。将*操作符添加在迭代指针前,即可访问当前指向的内容。Mat& ScanImageAndReduceIterator(Mat& I, const uchar* const table) { // accept only char type matrices CV_Assert(I.depth() != sizeof(uchar)); const int channels = I.channels(); switch(channels) { case 1: { MatIterator_<uchar> it, end; for( it = I.begin<uchar>(), end = I.end<uchar>(); it != end; ++it) *it = table[*it]; break; } case 3: { MatIterator_<Vec3b> it, end; for( it = I.begin<Vec3b>(), end = I.end<Vec3b>(); it != end; ++it) { (*it)[0] = table[(*it)[0]]; (*it)[1] = table[(*it)[1]]; (*it)[2] = table[(*it)[2]]; } } } return I; }
对于彩色图像中的一行,每列中有3个uchar元素,这可以被认为是一个小的包含uchar元素的vector,在OpenCV中用 Vec3b 来命名。如果要访问第n个子列,我们只需要简单的利用[]来操作就可以。需要指出的是,OpenCV的迭代在扫描过一行中所有列后会自动跳至下一行,所以说如果在彩色图像中如果只使用一个简单的 uchar而不是 Vec3b 迭代的话就只能获得蓝色通道(B)里的值。
相关文章推荐
- opencv学习(5) 使用迭代器遍历图像的像素
- OPenCV2_如何使用迭代器遍历图像
- OPENCV学习笔记2-2_图像遍历(使用指针)
- OPENCV学习笔记2-3_图像遍历(迭代器)
- 学习《OpenCV 2 计算机视觉编程手册》第二章---使用指针遍历图像案例
- (未实用 需多个函数配套使用)opencv3.0 函数学习 10——morphologyEx 形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑
- opencv学习笔记之对灰度图像遍历的三种方法
- javacpp-opencv图像处理3:使用opencv原生方法遍历摄像头设备及调用(增加实时帧率计算方法)
- OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度
- opencv学习笔记(02)——遍历图像(指针法)
- 学习OpenCV范例(四)——使用OpenCV对两幅图像求和(求混合(blending))
- 小赵学习Opencv(3)之高效图像遍历循环
- OpenCV学习笔记——使用OpenCV访问图像数据
- 学习opencv之(六)-图像切割,使用ROI
- javacpp-opencv图像处理3:使用opencv原生方法遍历摄像头设备及调用(增加实时帧率计算方法)
- 学习opencv 使用反向块投影搜寻图像中的物体的位置 cvCalcBackProjectPatch
- [OpenCV2]使用指针遍历图像
- opencv 2.x学习笔记(六) 扫描、遍历图像
- OpenCV 2 学习笔记(25): 使用分水岭分割图像
- 学习opencv第六章习题5 , 使用x,y阶层数求出图像内唯一直线的角度