Opencv学习总结之基础容器Mat

基础容器Mat

Mat是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。Mat使用引用计数机制,让每一个Mat对象有自己的信息头,但共享同一个矩阵。这通过让矩阵指针指向同一个地址实现。而拷贝构造函数则只复制信息头和矩阵指针,而不是复制矩阵

显示创建Mat对象的六种方法

方法一

最常用的方法是直接使用Mat()构造函数。

Mat M(2,2,CV_8UC3,Scalar(0,0,255));
M=
	[0,0,255,0,0,255;
	 0,0,255,0,0,255;]
第一个参数是行数,第二个参数是列数;
第三个参数是数据类型:
CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]
CV_8UC3表示8位的unsigned char型,每个像素由三个元素组成三通道;
第四个参数是数值:在opencv中采取的是BGR的三色顺序,Scalar(B,G,R);

方法二

这种方法为在C\C++中通过构造函数进行初始化。

int sz[3]={2,2,2];
Mat L(3,sz,CV_8UC,Scalar::all(0));
这是一个三维数组。
第一个参数指定维数,第二个参数传递一个数组的指针,这个数组包含每个维度的大小;
第三个参数如上(8位的unsigned char型,每个像素由一个元素组成)
第四个参数如上(全设了0);

方法三

利用Mat类中的Create()成员函数进行Mat类的初始化操作。

Mat M;
M.create(4,4,CV_8UC3)
第一个参数是行数,第二个参数是列数;
第三个参数是数据类型如上;

方法四

采用Matlab形式的初始化方式:zeros(),ones(),eye()。

Mat A=Mat::zeros(4,4,CV_8UC3);  表示矩阵里的数值全设为0
Mat B=Mat::ones(4,4,CV_32F);    表示矩阵里的数值全设为1
Mat C=Mat::eye(4,4,CV_64F);     表示矩阵里的对角线数值都设为1,其余为0

方法五

对小矩阵使用矩阵逗号间隔式初始化函数

Mat M=(Mat_<uchar>(3,3) << 0,1,0,0,1,0,0,1,0);
M=
	[0,1,0;
	 0,1,0;
	 0,1,0;]
(Mat_<type>(rows,cols) << vals);

方法六

使用成员函数clone()或者copyTo()为一个已存在的Mat对象创建一个新的信息头。

Mat src(4,4,CV_8UC3,Scalar(0,0,255));
Mat duplicate1=src.clone();
Mat duplicate2;
src.copyTo(duplicate2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值