image stride(图像行跨度) 即内存中每行像素所占的控件,为了实现内存对齐或者其他的原因,每行像素在内存中所占据的空间并不是图像的宽度。
如图所示,对于图像数据而言,其像素存储是一行接一行的,但是对于不同的图像格式可能采用不同的压缩方式,而这些压缩方式的数据也需要存储到图像中,方便读取以及写入。在上图中,图像中的height就是图像的高,而图像的宽不是一行数据的大小,而只是其中的一部分数据。stride是width以及 padding的和。width即使图像的框,而padding则用来存贮与图像格式相关的信息 (例如同样大小的图像,8bit与32bit的保存方式其内存对齐不同,stride也就不相同)。pitch和stride类似,只不过pitch是对像素而言,stride则是对字节而言。下图表达了图像的存储方式
跨距-stride
我们都知道现在计算机的cpu都是32位或者64位的cpu,他们一次最少读取4、8个字节,如果少于这些,反而要做一些额外的工作,会花更长的时间。所有会有一个概念叫做内存对齐,将结构体的长度设为4、8的倍数。
跨距也是因为同样的理由出现的。因为图像的操作通常按行操作的,如果图像的所有数据都紧密排列,那么会发生非常多次的读取非对齐内存。会影响效率。而图像的处理本就是一个分秒必争的操作,所以为了性能的提高就引入了跨距这个概念。跨距就是指图像中的一行图像数据所占的存储空间的长度,它是一个大于等于图像宽度的内存对齐的长度。
这样每次以行为基准读取数据的时候就能内存对齐,虽然可能会有一点内存浪费,但是在内存充裕的今天已经无所谓了。
https://www.jianshu.com/p/68e05ad85490