首先需要确定的一点是,step[i],step1(i),elemsize,elemsize1都是指的字节数

1 opencv中Mat类的elemsize是每个元素的字节数,如果一个图像是3通道,每个通道是16位,那么
其elemsize就是3*(16/8)=6,即每个元素占6个字节
2 opencv中Mat类的elemsize1是指每个元素每个通道所占的字节数,对应于上面就是2个字节

3 opencv中Mat类的step,step是一个数组,定义了矩阵的布局,需要注意的是几个固定的等式:
step1(i)=step[i]/elemsize1;step[m-1]=elemsize;其中m是图像的维数,step1(m-1)=channels;

矩阵 (M) 中数据元素的地址计算公式:
addr(Mi0,i1,…im-1) = M.data + M.step[0] * i0 + M.step[1] * i1 + … + M.step[m-1] * im-1 (其中 m = M.dims M的维度)

下面举例:对于2维的情况:
一个 3 X 4 的矩阵,假设其数据类型为 CV_8U,也就是单通道的 uchar 类型

这是一个二维矩阵,那么维度为 2 (M.dims == 2);
M.rows == 3; M.cols == 4;
sizeof(uchar) = 1,那么每一个数据元素大小为 1 (M.elemSize() == 1, M.elemSize1() == 1);
CV_8U 得到 M.depth() == 0, M.channels() == 1;
因为是二维矩阵,那么 step 数组只有两个值, step[0] 和 step[1] 分别代表一行的数据大小和一个元素的数据大小,则 M.step[0] == 4, M.step[1] == 1;
M.step1(0) == M.cols = 4; M.step1(1) == 1;
假设上面的矩阵数据类型是 CV_8UC3,也就是三通道

M.dims == 2; M.channels() == 3;M.depth() == 0;
M.elemSize() == 3 (每一个元素包含3个uchar值) M.elemSize1() == 1 (elemSize / channels)
M.step[0] == M.cols * M.elemSize() == 12, M.step[1] == M.channels() * M.elemSize1() == M.elemSize() == 3;
M.step(0) == M.cols * M.channels() == 12 ; M.step(1) == M.channels() == 3;

对于3维时:

上面是一个 3 X 4 X 6 的矩阵,假设其数据类型为 CV_16SC4,也就是 short 类型

M.dims == 3 ; M.channels() == 4 ; M.elemSize1() == sizeof(short) == 2 ;
M.rows == M.cols == –1;
M.elemSize() == M.elemSize1() * M.channels() == M.step[M.dims-1] == M.step[2] == 2 * 4 == 8;
M.step[0] == 4 * 6 * M.elemSize() == 192;
M.step[1] == 6 * M.elemSize() == 48;
M.step[2] == M.elemSize() == 8;
M.step1(0) == M.step[0] / M.elemSize() == 192 / 2 == 96 (第一维度(即面的元素个数) * 通道数);
M.step1(1) == M.step[1] / M.elemSize() == 48 / 2 == 24(第二维度(即行的元素个数/列宽) * 通道数);
M.step1(2) == M.step[2] / M.elemSize() == M.channels() == 4(第三维度(即元素) * 通道数);

opencv中step[i],step1(i),elemsize,elemsize1相关推荐

  1. OpenCV中Mat属性step,step1,elemSize,elemSize1

    网上写的太过复杂难以理解,我来简单说一下吧: 1.什么是字节: 字节,符号为B,一个字节由8个2进制组成(1B=8bit),表示的范围为0-255,每一个值表示一个符号. 2. 每个代表的含义:(都是 ...

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

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

  3. Opencv--Mat属性step,size,step1,elemSize,elemSize1

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

  4. opencv的Mat中step的解释

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

  5. Opencv中 Mat矩阵中属性【随笔记】

    Opencv Mat矩阵中data.size.depth.elemSize.step等属性的理解 data: uchar类型的指针,指向Mat数据矩阵的首地址.可以理解为标示一个房屋的门牌号: dim ...

  6. OpenCV中Mat的属性

    OpenCV中Mat的属性 最近在做一OpenCV的图像轮廓检验,但当用到霍夫变换时才发现对Mat的属性了解不足.Mat在OpenCV中的地位是及其重要的,因此有必要做一个总结. 大体上来说,Mat是 ...

  7. opencv中imgproc库中函数详解(1)

    BaseColumnFilter 单列核的基础滤波器. [cpp] view plaincopy class BaseColumnFilter { public: virtual ~BaseColum ...

  8. opencv中 .at<uchar>()和.ptr<uchar>()使用方法的区别

    opencv中 .at<uchar>()和.ptr<uchar>()使用方法的区别在opencv中,.at<uchar>()和.ptr<uchar>() ...

  9. 图像积分图 c语言,Opencv中integral计算积分图

    积分图的概念最初是由Paul Viola和Michael Jones在2001年提出的,在他们的论文"Rapid Object Detection using a Boosted Casca ...

  10. OpenCV中基本数据类型Mat类使用简析

    Mat 类是OpenCV中的一个基本数据类型,它是一个n维密集数组类 Mat 类表示一个 n 维密集数值单通道或多通道数组.它可用于存储实数或复值向量和矩阵.灰度或彩色图像.体素体积.向量场.点云.张 ...

最新文章

  1. 如何使用 BERT 进行自然语言处理?
  2. 关于DOM的有关总结
  3. 使用 Equinox 开发 OSGi 应用程序
  4. linux kernel中cache代码解读
  5. PSD分层模板|解析垂直化内容电商页面设计
  6. atos命令符化号crash文件
  7. JavaScript高级程序设计33.pdf
  8. mysql 查询表,视图,触发器,函数,存储过程
  9. 剑指offer题目系列二
  10. ARcgis常用符号库(含字体库)_三调_二调_规划等
  11. 通过微信聊天记录生成词云
  12. 我的计算机c盘计划,我的电脑C盘空间不够,该怎么样清理?
  13. 【c++】cout.setf(left)、cout.setf(right)详解
  14. 事务开启SpringBoot报错 The bean ‘xxxImpl’ could not be injected as a ‘com.xxx.service.impl.xxxServiceImpl
  15. C++读txt文件,存入vector容器中
  16. 数组实现链表(C++代码+图解)
  17. [Hadoop] mac搭建hadoop3.X 伪分布模式
  18. 想要实验结果准确?玻璃器皿清洗方法和要点你可得知道!
  19. JavaScript调用原生API获取手机型号
  20. 基于机器学习的古代汉语自动分词标注算法及语料库研究

热门文章

  1. wex5 ajax,关于Ajax请求 - WeX5开发者论坛 - 起步软件技术论坛 - Powered by Discuz!
  2. Tilera平台使用体会
  3. 炫酷又实用的发送邮箱链接修改密码
  4. Java面试题大全(part_4)
  5. python 抓取 实时公交_Python实现命令行监控北京实时公交之一
  6. 陈耀烨九段加冕新名人见证实录
  7. $(document)和$(window)各是什么意思
  8. Python(2)模块和数据类型
  9. 利用pyboardCN V2播放Bad apple
  10. 陶哲轩实分析 习题6.3.3