cv::Mat 中的 step成员变量
2013-03-20 15:49
155 查看
There is yet another member, cv::Mat::step that is used to actually compute address of a matrix element.
cv::Mat::step is needed because the matrix can be a part of another matrix
or because there can some padding space in the end of each row for a proper alignment.
OS内存读取以4字节为单位,原因可参考 http://blog.csdn.net/21aspnet/article/details/6729724
opencv 图像为行优先存储的,即先存第一行、第二行依次类推。
为了读取效率(这个如果具体理解:相对于将所有数据无填充地分配内存,保证每行都是对齐,在一定程度上增加了每次访问元素内存是对齐的概率)
所以图像create的时候,是以step*rows分配内存的,如果直接访问 Mat img.data应注意此问题;
所以推荐其它的访问方式:比如 ptr,或者 at<type>函数
但此过程是opencv内部代码设定的,因为allocate内存完全可以是连续的,而struct 定义编译器会自动分配!
若使用user allocate data初始化Mat,且这些数据没有考虑对齐问题,Mat的step与一行数据的大小是相同!
cv::Mat::step is needed because the matrix can be a part of another matrix
or because there can some padding space in the end of each row for a proper alignment.
OS内存读取以4字节为单位,原因可参考 http://blog.csdn.net/21aspnet/article/details/6729724
opencv 图像为行优先存储的,即先存第一行、第二行依次类推。
为了读取效率(这个如果具体理解:相对于将所有数据无填充地分配内存,保证每行都是对齐,在一定程度上增加了每次访问元素内存是对齐的概率)
所以图像create的时候,是以step*rows分配内存的,如果直接访问 Mat img.data应注意此问题;
所以推荐其它的访问方式:比如 ptr,或者 at<type>函数
但此过程是opencv内部代码设定的,因为allocate内存完全可以是连续的,而struct 定义编译器会自动分配!
若使用user allocate data初始化Mat,且这些数据没有考虑对齐问题,Mat的step与一行数据的大小是相同!
相关文章推荐
- Mat矩阵 成员函数 和成员变量 总结
- opencv深入学习(1)--Mat主要成员变量
- CV_MAT2VEC( mat, vdata, vstep, num )
- opencv深入学习(1)--Mat主要成员变量
- Mat-成员变量的flags的含义
- opencv深入学习(1)--Mat主要成员变量
- opencv深入学习(1)--Mat主要成员变量
- QObject::connect: Cannot queue arguments of type 'cv::Mat'
- Java基础知识_day07_(面向对象,构造方法,封装,成员变量与局部变量)
- c++类中成员变量的初始化总结
- C++类中成员变量的初始化总结
- 类-成员变量和局部变量
- C++类中成员变量的初始化总结
- 成员变量与局部变量的区别
- QImage 与 cv::Mat 之间的相互转换
- C++编程规范指47.以同样的顺序定义和初始化成员变量
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- java成员变量修饰符
- Opencv2 学习笔记<一>:cv::Mat数据访问方式