网络上对Mat的详解,绝大多数是翻译官方的manual,而官方的manual却恰好对部分(官方认为)我们平时很少使用的内容没有详细的解释,或者对一些实现没有解释细节,因此我们就很难在刚入门时迅速地对某些内容有详细的认识,Mat的step就是其中之一。

在经过数天对Mat的研究,也对step有一定的认识了,这里说出我的愚见以抛砖引玉,有不足或错误之处希望各位指出,谢谢。

其实对step成员数组的解释就是step的意思,只要翻译对了,就能明白step的意思,step的翻译在这里不应该被翻译为步、脚步、步骤、步伐,而是” 梯级 “,也就是说step这里指出的是图像在各个梯级上的字节数大小,而这里的梯级指的是构成图像的名层次。

这里引用官方manual的几句话:

Note that M.step[i] >= M.step[i+1] (in fact, M.step[i] >= M.step[i+1]*M.size[i+1] ). This means
that 2-dimensional matrices are stored row-by-row, 3-dimensional matrices are stored plane-by-plane, and so on.

这句话可对刚入门图像处理的人(例如我~~)抓狂啊,为什么M.step[i]必定>= M.step[i+1]  ??为什么这能说明2-dimensional matrices are stored row-by-row, 3-dimensional matrices are stored plane-by-plane, and so on ??

但事实上,了解图像构成,或者学过GIMP图像处理,甚至PS的人看到这里就会明白一二了。

就举那段话的2个例子大家就能明白了:

由于图像的构成是分层次的(也就是上面说的梯级),所以:

二维图像由一行一行(第一级)构成,而每一行又由一个一个点(第二级)构成

三维图像由一个一个名面(第一级)构成,每一个平面由一行一行(第二级)构成,每行由一个一个点(第三级)构成。

到这里,原因就呼之欲出了,Mat中的step[0]就是我们每一个第一级,在内存中占据的字节数量。例如,二维图像中step[0]就是每一行(第一级)在矩阵内存中,占据的字节的数量。也就是说step[i]就是第i+1级在矩阵内存中占据的字节的数量。

而每一级的字节数是多少就必须体现在下一级的数量上。

例如,二维图像中step[0](第一级)的大小与点的数量有关(第二级)。而每个点占据的大小,也就是step[M.dims − 1] 就成了关键了,它的大小是多少,这点我就下不了定论了,因为这点是我们自行定义的,我们可以定义不同的通道数,每个通道不同的字节数,然后 通道数×每个通道字节数 就得出step[M.dims − 1]了

--Jdps 2013.2.7

opencv的Mat中step的解释相关推荐

  1. Mat中step的含义

    转载自:http://lib.csdn.net/article/opencv/28700 以三维的Mat数据布局为例 step这里指出的是图像在各个梯级上的字节数大小,而这里的梯级指的是构成图像的名层 ...

  2. opencv如何把一个矩阵不同列分离开_【opencv基础】OpenCV从Mat中提取某些行或列

    前言 Opencv中可以调用函数提取某些连续的行或者列,Mat的rowRange和colRange可以获取某些范围内行或列的指针: 这两个函数返回的是指向原矩阵内部位置的指针,类似于浅拷贝: exam ...

  3. opencv提取Mat中的某些行和列

    原始Mat格式数据: cv::Mat A = Mat::zeros(4, 5, CV_32F);[4行5列,高4宽5] 1.提取行 函数:Mat::rowRange(int startrow, int ...

  4. OpenCV从Mat中提取某些行或列

    Mat的rowRange和colRange可以获取某些范围内行或列的指针: Mat::rowRange Creates a matrix header for the specified row sp ...

  5. OpenCV中Mat属性step,size,step1,elemSize,elemSize1

    Mat的step,size,step1,elemSize,elemSize1这几个属性非常容易混淆. OpenCV的官方参考手册也没有解释清楚这几个概念. 前一段时间研究了一下每个属性的含义,如果有什 ...

  6. 【OpenCV】Mat的使用方法以及Mat中的参数和函数

    Mat Mat的简单使用 从实际出发,先看看他干啥的,怎么用. 一般我们用到Mat有两个重要的用途: 1.存储图像(其实图像可以看成一个高行宽列的一个矩阵) 2.存储矩阵 先来看看Mat用于图像和矩阵 ...

  7. mat opencv 修改roi_OpenCV Android:在新Mat中定义并保存ROI(OpenCV Android: Define and save ROI in new Mat)...

    OpenCV Android:在新Mat中定义并保存ROI(OpenCV Android: Define and save ROI in new Mat) 我正在尝试将我的图像的一部分切割(裁剪)到另 ...

  8. opencv获取mat的指针_数字图像处理之opencv中Mat数据操作

    数字图像处理其实就是处理二维矩阵数据.利用opencv来学习处理算法是一种比较好的方式.学习opencv,主要就是调用其中的图像处理函数来实现各种操作.如果要得到想要的处理结果,还需要对图像处理算法有 ...

  9. ffmpeg解码到opencv Mat中

    rtsp 接收解码与opencv结合并不是使用opencv直接打开rtsp 链接的意思,使用live555等工具或者自行编写后解码时与opencv直接融合 cv::Mat 解码时如何把解码数据直接放到 ...

最新文章

  1. RBee ZigBee无线透明传输通信模块 兼容arduino平台 类似XBee
  2. Redis Sentinel--运维管理
  3. mysql 双节点主从搭建_MySQL Replication, 主从和双主配置
  4. 无限式查找-----2013年2月28日
  5. 深度学习之卷积神经网络CNN理论与实践详解
  6. Mysql命令行下实现数据的导入
  7. 文科出身敲出 Instagram,被小札“挤”走,建新冠追踪网站
  8. push指令的执行过程
  9. json mysql 字段 默认值_MySQL JSON 类型数据操作
  10. 卸载mysql server_windows中彻底卸载mysql
  11. 华为HCIE云计算培训笔记第一天
  12. 同步电机是如何达到同步的?工作原理是什么?
  13. 单一窗口关区备案_【亚东关务】单一窗口集中申报来了,集报备案、集报清单详细操作手册...
  14. 如何用Smartbi做数据可视化分析图表
  15. python下标访问字典的指_python字典下标
  16. macOS Big Sur 11.7.2 (20G1020) 正式版 ISO、PKG、DMG、IPSW 下载
  17. iOS app加密探究爱加密iOS app加密原理
  18. 如何伪装成一个服务端开发(五)
  19. IDEA设置自定义主题背景
  20. mysql 配置环境变量的方法及作用

热门文章

  1. 提高女性区块链采用率,真正实现普遍接受
  2. 基于python的课程网站的设计与实现
  3. flash小黄油安卓_体验谷歌的Windows、安卓、Linux三合一系统,一个U盘足以
  4. 【随机过程】第二章——随机过程概论
  5. dz文件cp.php,DZ文件扩展名 - 什么是.dz以及如何打开? - ReviverSoft
  6. 特斯拉与宁波旭升 EDI项目案例
  7. vimeo 镜像_Vimeo的首席应用程序开发人员Kevin Sheurs访谈
  8. C#身份证验证封装的函数方法
  9. 130个微信小程序源码资源免费领取
  10. JOHNSON计数器,环形计数器,普通计数器