Opencv图像处理学习(二)——Mat类

在Opencv1.0中存储图像的变量类型一般为cvMat和IpLImage,现在一般不用了。

在Opencv2.0以后引入了Mat类,其好处是:1.不用手动开辟空间 2.不必在不需要时立即释放,这样使得开发效率大大提高。

Mat类由矩阵头和指向存储所有像素值的矩阵的指针构成。Mat类表示一个n维的密集数值单通道或多通道数组,可用来存储实数和复数的向量和矩阵、图像类等。

下面是Mat类的代码

class CV_EXPORTS Mat

{

  public:

//标志位

int flags;

//数组的维数,≥2

int dims;

//行和列的数量或(-1,-1),此时数组已超过2维

int rows,cols;

//指向数据的指针

uchar *data;

//指针的引用计数器,当阵列指向用户分配的数据时,指针为NULL

int *refcount;

};

矩阵头用来刻画矩阵尺寸,存储方法、存储地址及引用次数等信息,矩阵头大小是一个常数,不会随图像的大小变化而变化,但是保存图像像素数据的矩阵则会随图像的大小变化而改变,通常数据量会很大,比矩阵头大几个数量级。这样在图像复制和传递过程中,内存主要的开销是由存放图像像素的矩阵引起的。因此,OpenCV使用了引用次数,当进行图像复制和传递时,不再复制整个Mat数据,而只是复制矩阵头和指向像素矩阵的指针

Mat类常用构造方法如下:

1.Mat Image;//无参数构造方法   

e.g: Mat origin_Image;

2.Mat Image(int rows,int cols,int type,const Scalar&s);//创建行数为rows,列数为cols,类型为type,并将所有元素初始化为值s 

e.g:Mat Image(6,6,CV_8UC2,Scalar(1,3);//其中8U表示8位无符号整数,C2表示二通道,Scalar表示赋值为(1+3j)

3.Mat Image(Size size,int type,const Scalar&s);//创建大小为size,类型为type的图像,并将所有元素初始化为s 

e.g:Mat Image(size(7,7),CV_8UC3,Scalar(1,2,3));

4.Mat(const Mat&m)//将m赋值给新创建的对象

e.g:Mat Image6(Image2);

Mat基本操作

Mat::row;   Mat::col

e.g:int rows = Image.row;

Mat::rowRange Mat::colRange//为指定的行(列)span创建一个矩阵头,可取指定行(列)区间元素

Mat::clone;//创建一个数组及其基础数据的完整副本

Mat::copyto;//把矩阵复制到另一个矩阵中

Mat::convertTo;//数据类型转行

Mat::zeros;//返回制定的大小和类型的零数组

Mat::ones;//返回制定的大小和类型全为1的数组

Mat::channels;//返回矩阵通道的数目

Mat::empty;//如果数组有没有 elemens,则返回True

Mat::at;//返回对指定数组元素的引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值