cv::Mat 中的 step成员变量


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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值