opencv复习的第一天

Mat类的作用

能够创建或指向一个数据矩阵(存储图片),且可以调整的指向部分数据矩阵的类。

创建方式

图片在opencv的一些基本存储方式:

1.像素点,一张照片是由X行Y列的像素点组成的,而记录这些像素点的数据空间,便是矩阵。
2.BGR三色(蓝绿红,三通道),一般图片的每个像素点(存储三个值)皆是由这三种颜色的明暗程度(0-255)构成的。
3.灰度图片(黑白照片,单通道),早期的黑白电视肯定只有一种色彩表达方式就是黑白的明暗相当于单通道,每个像素点只有一个值(0-255)代表该像素点的明亮程度。

Mat类的几种基本创建方式:

方法一:以读取图片赋值的方式创建

//对象A记录了照片1的大小,存储方法和在项目运行内存中的存储位置。
Mat  A = imread("1.png");

方法二:以Mat自身的构造函数创建:
原函数 Mat(int rows, int cols, int type, const Scalar& s);

//4行4列的3通道,纯黑图片(0,0,0)
Mat A44CV_8UC3,Scalar::all(0));

rows代表行数;cols代表列数;
type:CV_(单个像素的单个通道存储位数)(通道数值存储的类型)C(通道数)

方法三:为已存在的Ipllmage创建信息头,基本淘汰不进行讨论。

方法四:Create()函数

//3行4列的通道数为三的图片,内存已经生成。
Mat MM.create(3,4,CV_8UC(3));

生成内容在这里插入图片描述
方法五:Matlab式初始化
Matlab的矩阵与opencv存储图片很类似,因此opencv有Matlab初始化矩阵的几种简单方法:zeros(),ones(),eye()。
前两个可以直接猜测出来是建立全零(zero)矩阵,后者建立全壹(one)矩阵。最后一个(eye)是建立“单位矩阵”,也就是对角线为壹,其他为零。
它们共同的特点是对于多通道只对第一通道处理,其他通道默认为零。

//3行4列的通道数为2的图片,内存已经生成。
Mat::eye(3,4,CV_8UC2);

在这里插入图片描述
方法六:针对小矩阵的初始化,采用逗号分隔

Mat a = (Mat_<double>(2, 3) << 0.2, 1, 2, 3, 4, 5);

Mat m = (Mat_<数据类型>(rows,cols)<<*);
在这里插入图片描述
方法七:对已经存在对象创建新的信息头
这个信息头其实说法错误,其实是开辟了是的内存空间。用已经存在的Mat类对象来初始化一个新的Mat类对象。

Mat a = (Mat_<uchar>(2, 3) << 1, 1, 1, 2, 2, 2);
	Mat b = a.row(0).clone();
	cout << "修改前" << endl;
	cout << "a为:\n" << a << endl;
	cout << "b为:\n" << b << endl;
	a.at<uchar>(0, 2) = 7;
	cout << "修改后" << endl;
	cout << "a为:\n" << a << endl;
	cout << "b为:\n" << b << endl;

在这里插入图片描述
可以看出当对象a改变时对象b中的值没有改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值