opencv_mat类存取方法(元素访问)

opencv_mat类存取方法(元素访问)

ID:6732930

大小:540.50 KB

页数:13页

时间:2018-01-23

opencv_mat类存取方法(元素访问)_第1页
opencv_mat类存取方法(元素访问)_第2页
opencv_mat类存取方法(元素访问)_第3页
opencv_mat类存取方法(元素访问)_第4页
opencv_mat类存取方法(元素访问)_第5页
资源描述:

《opencv_mat类存取方法(元素访问)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Opencv----Mat类·cv::Mat·depth/dims/channels/step/data/elemSizeMat矩阵中数据元素的地址计算公式: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的维度i.data:Mat对象中的一个指针,指向内存中存放矩阵数据的一块内存(uchardata).ii.row:行;col:列;rows:行数;cols:列数。iii.dims:Mat所代表的矩阵的维度,如34的矩阵为2维

2、,345的为3维.iv.channels:通道,矩阵中的每一个矩阵元素拥有的值的个数,比如说34矩阵中一共12个元素,如果每个元素有三个值,那么就说这个矩阵是3通道的,即channels=3。常见的是一张彩色图片有红、绿、蓝三个通道。但是opencv用imread(opencv读图的函数)读进来的图像,三通道存放顺序为B、G、R。v.depth:深度,即每一个像素的位数(bits),在opencv的Mat.depth()中得到的是一个0–6的数字,分别代表不同的位数:enum{CV_8U=0,CV_8S=1,CV_16U=2,CV_16S

3、=3,CV_32S=4,CV_32F=5,CV_64F=6};可见0和1都代表8位,2和3都代表16位,4和5代表32位,6代表64位;vi.step:是一个数组,定义了矩阵的布局,具体见下面图片分析,另外注意step1(step/elemSize1),M.step[m-1]总是等于elemSize,M.step1(i)返回的是第i维的步长,因此M.step1(m-1)总是等于channels,m是M的维度;这里是解释步长step[k]的,步长也可以看作是与第k维的存储单位,在2维的矩阵中,因为存储是按照行的顺序存储的,整个矩阵存储为一个

4、平面,所以第k=0维的步长也就是单位肯定就是一行所占的字节数;如果是3维的话,第0维是按照面为单位来存储的,第1维是按照行为单位来存储的,第2维是按照元素类型为单位存储的,每个元素类型是基本类型(即uchar,float,short等等)与通道数的乘积...;也就是基本数据类型与通道数组成元素,多个元素组成了行,多行组成了面,多个面组成了3维体,多个3维体组成4维超体。。。以此类推,如此看来某一维的步长应该等于高一维的步长step低一维的大小size。i.elemSize:矩阵中每一个元素的数据大小,如果是n通道,就是(n数据类型)。如果

5、Mat中的数据的数据类型是CV_8U那么elemSize=1,CV_8UC3那么elemSize=3,CV_16UC2那么elemSize=4;记住另外有个elemSize1表示的是矩阵中数据类型的大小,即elemSize/channels的大小。图片分析1:考虑二维情况(storedrowbyrow)按行存储上面是一个3X4的矩阵,假设其数据类型为CV_8U,也就是单通道的uchar类型·这是一个二维矩阵,那么维度为2(M.dims==2);·M.rows==3;M.cols==4;·sizeof(uchar)=1,那么每一个数据元素大

6、小为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.elemS

7、ize()==3(每一个元素包含3个uchar值)M.elemSize1()==1(elemSize/channels)·M.step[0]==M.colsM.elemSize()==12,M.step[1]==M.channels()M.elemSize1()==M.elemSize()==3;·M.step(0)==M.colsM.channels()==12;M.step(1)==M.channels()==3;图片分析2:考虑三维情况(storedplanebyplane)按面存储上面是一个3X4X6的矩阵,假设其数据类型为CV_

8、16SC4,也就是short类型·M.dims==3;M.channels()==4;M.elemSize1()==sizeof(short)==2;·M.rows==M.cols==–1;·

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。