您的位置:首页 > 其它

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与一行数据的大小是相同!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: