Mat的介绍和使用

Mat:基本图像容器 
在以前的老式opencv中使用的是C结构,很烦人,需要注意内存的申请和销毁,后来转为C++接口,使用Mat对象,自动申请和销毁内存,很方便。 
Mat由基本的两部分组成:矩阵头(包含图片信息,例如矩阵大小,存储方法等)和一个指向包含像素点信息的指针。矩阵头部大小是常数,但是矩阵的大小却各不相同。 

Mat中重要的几个成员: 

  1.  size_t elemSize() const; 
  2.  int type() const;
  3.  int depth() const;
  4.  int channels() const;
  5.  size_t step1(int i=0) const
  6.  int dims
  7.  int rows, cols

channels:我们熟悉的是彩色图像三通道RGB,也就是矩阵中每一个元素值的个数,就像一个彩色像素点它由R、G、B三个混合而成。处于某行某列的像素点有三个值分别为RGB。 
depth:深度是用来度量每一个像素的精度,每个像素的位数(bit)也就是深度越深,精度越高。在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 }; 其中U表示unsigned的意思,S表示signed,也就是有无符号。我们可以看作以8U为基本单位 
dim:矩阵维度 
rows/cols(size):行列数。 
type :表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_ + (位数)+(数据类型)+(通道数)。 
data: uchar型的指针。Mat类分为了两个部分:矩阵头和指向矩阵数据部分的指针,data就是指向矩阵数据的指针。 

Mat对象构造函数:(常用) 
Mat(); 
Mat(int rows, int cols, int type); 
Mat(Size size, int type); 
Mat(int rows, int cols, int type, const Scalar& s); 
Mat(Size size, int type, const Scalar& s); 
Mat(int ndims, const int* sizes, int type); 
Mat(int ndims, const int* sizes, int type, const Scalar& s); 

常用方法: 
void copyTo(Mat mat) //完全复制一份 
void convertTo(Mat dst, int type) //转换,比如8位的转换为float 
Mat clone() //完全复制一份 
int channels() //通道数 
int depth() //深度 
bool empty(); //是否空 
at(int i0,int i1) //访问矩阵元素 

Mat对象使用,四个要点: 
输出图像的内存是自动分配的 
使用OpenCV的C++接口,不需要考虑内存分配问题 
赋值操作和拷贝构造函数只会复制头部分 
使用clone与copyTo两个函数实现数据完全复制 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值