opencv学习总结

Mat类学习

Opencv中的数据类型与我们常用的数据类型的一一对应关系:Mat_->CV_8U;Mat_->CV_8S;Mat_->CV_16S;Mat_->CV_16U;Mat_->CV_32S;Mat_->CV_32F;Mat_->CV_64F。

Mat类中depth与type属性的理解:depth是用来度量每一个像素中每一个通道的精度,但它本身与图像的通道数无关。depth数值越大,精度越高。type是矩阵的类型,包含矩阵中元素的类型以及通道数信息,type的命名格式为CV_(位数)+(数据类型)+(通道数)。

Mat类中data属性理解:uchar类型的指针,指向Mat数据矩阵的首地址。

Mat类中可以访问像素值的函数:1)ptr函数:该函数作用是可以访问任意一行像素的首地址,格式是image.ptr<数据类型,一般为uchar>(指定的行数);2)at函数:该函数作用是可以访问图像中的任意一个像素,格式有两种,单通道是image.at(i,j);三通道格式如下:蓝色通道:image.at(i,j)[0];绿色通道:image.at(i,j)[1];红色通道:image.at(i,j)[2]。

定义int数据类型的矩阵A,用at函数以double型进行访问矩阵A的元素,这是不可以的。定义double数据类型的矩阵A,用at函数以int型进行访问矩阵A的元素,这也是不可以的。因为在定义矩阵的时候,已经确定好了矩阵的元素类型,分配好了相应的矩阵内存,以另外的数据类型格式去访问的话,类型不匹配。如果要转换的话,需要在前面加上强制类型转换符。

Mat是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。

Mat类对图像内存的分配:一般来说,赋值运算符和拷贝构造函数(构造函数)只复制信息头,不复制整个矩阵,而使用函数clone()或者copyTo()是来复制一幅图像的矩阵。

Mat类定义对象常用的几种形式:
1.使用Mat()构造函数
常用的几种构造函数:1)Mat(int rows,int cols,int type);2)Mat(Size size,int type);3)Mat(int rows,int cols,int type,const Scalar& s);4)Mat(Size size,int type,const Scalar& s);

2.利用create()函数对Mat类进行初始化工作
举例:Mat B; B.Create(2,2,2,CV_8UC1);

3.利用Matlab式的初始化方式:zeros(),ones(),eye()
举例:
1)Mat E=Mat::eye(4,4,CV_64F);
2)Mat O=Mat:ones(2,2,CV_32F);
3)Mat Z=Mat::zeros(3,3,CV_8UC1);

4.对小矩阵使用逗号分隔式初始化函数
Mat C=(Mat_(3,3,)<<0,-1,0,-1,5,-1,0,-1,0);

5.为已存在的对象创建新信息头(使用成员函数clone()和copyTo()为一个已存在的Mat对象创建一个新的信息头)
Mat rowClone=C.row(1).clone();

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值