您的位置:首页 > 运维架构

opencv学习笔记——Mat属性与成员函数总结

2018-02-08 22:23 281 查看
 自己最近在看《opencv2 计算机视觉编程手册》学习了不少相关知识,这篇博文主要总结了己在学习过程中所遇到的Mat类的相关属性和成员函数,因为在学习过程中发觉关于Mat类属性与成员函数内容挺多而且特别容易混淆,所以把这些内容总结在这篇博文上。
cols , rows (属性)
顾名思义 rows 返回图像矩阵的行数,cols返回列数。
step (属性)
step以字节为单位的图像宽度。elemSize() (函数)
返回每一个像素点的字节数,比如三通道的short(两字节)型的矩阵(CV_16C3) elemSize()将返回 6 。会发现 step = elemSize() * cols
total() (函数)
返回总的像素点数,也就是 cols*rows
depth()  (函数)
depth函数返回每个像素点的数据类型。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}
  其中U是unsigned的意思,S表示signed,也就是有符号和无符号数。值得注意的是对于彩色图像每一个实际像素点是由BGR(实际在内存里的位置blue在前面,green在中间,red在后面)三个亚像素点构成,这里的depth() 返回的是每个亚像素点的数据类型。Mat.type()  (函数)
返回值在 Mat.depth()的值上加上某个数值,单通道叫0 双通道加8 三通道加16
clone()
拷贝一幅图像,这里的拷贝不是指只拷贝头信息然后依然共享矩阵数据,而是深拷贝。
create() (函数)
说到clone() 就不得不提create() 函数,两者都可以深度拷贝一幅图像但略有差别。
对于一个已经存在的Mat矩阵我们想根据新的尺寸和数据类型对这个矩阵进行重新分配,那么我们就可以调用create成员函数。而且,如果新指定的尺寸和数据类型与原有一样,create函数会直接返回,并不会对本实例做任何更改。result.create(image.rows,image.cols,image.type());
result.create(image.size(),image.type());data (属性)
图像数据是以unsigned char 形式保存在一块内存中。这块内存的首地址可以通过data成员变量获得。uchar* data = image.data;从当前行到下一行可以通过对指针加上行宽完成
data += image.step;  //下一行
也可以通过如下方式获得第 j 行、i 列的像素地址:data = image.data + j*image.stap + i*image.elemSize();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: