cv::Mat 中的 step成员变量

来源:互联网 发布:java并发编程实践 pdf 编辑:程序博客网 时间:2024/06/10 08:01


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与一行数据的大小是相同!

原创粉丝点击