OpenCV中mat的属性data、step、elemsize等
OpenCV中mat的属性
总结
- data:Mat对象中的一个指针,指向内存中存放矩阵数据的一块内存 (uchar* data),起始地址。
- dims:Mat所代表的矩阵的维度,如 3 * 4 的矩阵为 2 维, 3 * 4 * 5 的为3维
- channels:通道,矩阵中的每一个矩阵元素(像素)拥有的值的个数,比如说CV_8UC3,即 channels =
3。常见的是一张彩色图片有红、绿、蓝三个通道。 - depth:深度,即每一个像素的位数(bits),在opencv的Mat.depth()中得到的是一个 0 – 6
的数字,分别代表不同的位数:enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4,
CV_32F=5, CV_64F=6 }; 可见 0和1都代表8位, 2和3都代表16位,4和5代表32位,6代表64位; - step:数组,以字节为基本单位,
每一行中所有元素的字节总量(mat.step:二维矩阵,三维就是0了),矩阵有几维,step[]数组就有几个元素,如3维,则有3个元素,step[0],step1,step[2].分别对应面,线,点,最后一个总是表示点,然后依次向前为线,面… - step[m-1]:m是Mat维度,单个像素的字节数。
- step[m-2]:一行像素字节数。
- step1(m-1):单个像素通道数。
- step1(m-2):一行像素通道数。
- elemsize:每个像素的字节数。
- elemsize1:每个像素值的字节数(比如三通道的图像每个像素有三个像素值)。
公式:
- step1(i) = step[i] / elemsize1;
地址:
- addr(Mi_0,i_1,…i_{m-1}) = M.data + M.step[0] * i0 + M.step1 * i1 +
… + M.step[m-1] * im-1
参考:
https://blog.csdn.net/weixin_44456692/article/details/110493884?spm=1001.2014.3001.5506
https://blog.csdn.net/ahelloyou/article/details/114087174?spm=1001.2014.3001.5506