认识OpenCV之Mat类(二)

本文介绍了OpenCV的Mat类,作为处理图像的核心数据结构,Mat类提供了丰富的成员函数和变量。文章详细讲解了Mat的构造函数,如默认构造函数和带有大小及类型的构造函数,以及如何使用Scalar初始化元素值。此外,还探讨了at函数、channels函数、clone函数、convertTo函数、copyTo函数等关键成员函数,阐述了它们在图像处理中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Mat类简介

到 OpenCV2.X版本, OpenCV 开源库引入了面向对象编程思想,大量源代码用C++ 重写,Mat类(Matrix 缩写)是OpenCV 用于处理图像而引入的一个封装类。从功能上讲,Mat类在 IpIIamge 结构的基础上进一步增强,并且,由于引入C++ 高级编程特性,Mat类的扩展性大大提高,Mat 类的内容在后期的版本中不断丰富。查看Mat类的定义(OpenCV3.1\sources\modules\core\include\opencv2\core\mat.hpp),会发现其设计实现十分全面而具体,基本覆盖计算机视觉对于图像处理的基本要求。

因此,在当前的 OpenCV 开发中,Mat 可以说是最常见的数据单元,深入了解Mat 类对于 OpenCV 深入开发有着重大意义。

2. Mat 类常用成员函数和成员变量

Mat 类十分庞大,其涉及的成员函数和变量难以一一细数。在这里,仅学习记录其最常见的部分,以便日常使用。

2.1 构造函数

2.1.1 默认构造函数

cv::Mat::Mat()

默认构造函数,生成一个矩阵并由 OpenCV 提供的函数(一般是 Mat::create() 和 cv::imread() )来分配储存空间。Mat类可以分为两个部分: 矩阵头和指向像素数据的矩阵指针。

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

cv::Mat a; //默认构造函数,创建矩阵头
a = cv::imread("test.j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值