OpenCV学习之二: 使用指针遍历图像
来源:互联网 发布:php json encode 编辑:程序博客网 时间:2024/04/23 18:14
图像矩阵是如何存储在内存之中的?
图像矩阵的大小取决于我们所用的颜色模型,确切地说,取决于所用通道数。
如果是灰度图像,矩阵就会像这样:
而对多通道图像来说,矩阵中的列会包含多个子列,其子列个数与通道数相等。
例如,RGB颜色模型的矩阵:
注意到,子列的通道顺序是反过来的:BGR而不是RGB。很多情况下,因为内存足够大,可实现连续存储,因此,图像中的各行就能一行一行地连接起来,形成一个长行。连续存储有助于提升图像扫描速度,我们可以使用 isContinuous() 来去判断矩阵是否是连续存储的. 相关示例会在接下来的内容中提供。
1.高效的方法 Efficient Way
说到性能,经典的C风格运算符[](指针)访问要更胜一筹. 因此,我们推荐的效率最高的查找表赋值方法,还是下面的这种:
这里,我们获取了每一行开始处的指针,然后遍历至该行末尾。如果矩阵是以连续方式存储的,我们只需请求一次指针、然后一路遍历下去就行。彩色图像的情况有必要加以注意:因为三个通道的原因,我们需要遍历的元素数目也是3倍。
这里有另外一种方法来实现遍历功能,就是使用 data , data会从 Mat 中返回指向矩阵第一行第一列的指针。注意如果该指针为NULL则表明对象里面无输入,所以这是一种简单的检查图像是否被成功读入的方法。当矩阵是连续存储时,我们就可以通过遍历 data 来扫描整个图像。例如,一个灰度图像,其操作如下:
这回得出和前面相同的结果。但是这种方法编写的代码可读性方面差,并且进一步操作困难。同时,我发现在实际应用中,该方法的性能表现上并不明显优于前一种(因为现在大多数编译器都会对这类操作做出优化)。
0 0
- OpenCV学习之二: 使用指针遍历图像
- OpenCV学习篇之五 使用指针遍历图像
- opencv学习之遍历图像
- OpenCV学习之三:使用迭代器遍历图像
- 学习《OpenCV 2 计算机视觉编程手册》第二章---使用指针遍历图像案例
- opencv学习笔记(2)----颜色缩减(使用指针遍历图像)
- OpenCV随笔004-使用指针及迭代器遍历图像
- 使用指针遍历图像
- OpenCV学习遍历图像像素
- 学习OpenCV:图像的遍历
- opencv之高效遍历图像
- OpenCV学习篇之六 遍历图像和邻域操作
- 小赵学习Opencv(3)之高效图像遍历循环
- opencv学习(5) 使用迭代器遍历图像的像素
- [OpenCV2]使用指针遍历图像
- opencv学习(二)之图像的加载、显示、保存
- opencv学习(二十八)之基本图像阈值操作threshold
- opencv学习(二十七)之图像缩放函数resize
- UVa 527 oil deposits
- WPSExcel统计公式的使用
- 南阳理工OJ_题目49 开心的小明
- wikioi 1225 八数码难题 IDA*
- mysql导入导出
- OpenCV学习之二: 使用指针遍历图像
- Android上发送带附件的邮件
- 有关div布局的position:absolute属性
- mysql手记
- POJ-2081
- 感激一路风雨陪伴
- UIView详解
- 不再能遮风挡雨
- CareerCup之1.5 空格替换