| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> OpenCV基础---图像存储器(Mat类) -> 正文阅读 |
|
[人工智能]OpenCV基础---图像存储器(Mat类) |
一 图像存储容器? ? ? ? 学习图像处理首先要学会如何操作矩阵信息,在OpenCV中提供了一个Mat类用于存储矩阵数据。 ? ? ? ?Mat类用来保存矩阵类型的数据信息,包括向量,矩阵,灰度或彩色图像等数据。Mat类分为矩阵头和指向存储数据的矩阵指针两部分。其中矩阵头中包含矩阵的尺寸、存储方法、地址和引用次数。矩阵头的大小是一个常数,不会随着矩阵尺寸的大小二改变。在绝大多数情况下,矩阵头大小远小于矩阵中数据量的大小,因此图像复制和传递过程中的主要开销是存放矩阵数据。 1.创建Mat类
? ? ? ? 上述代码,首先创建了名为a的矩阵头,之后读入一张图像并将中的矩阵指针指向该图的像素数据,最后将a矩阵头中的内容复制到b矩阵头中。虽然a、b有各自的矩阵头,但是矩阵指针所指向的是同一矩阵数据,所以通过任意矩阵头修改矩阵中的数据时,另一个矩阵头指向的数据也会发生改变。但是当删除变量a时,b变量并不会指向一个空数据,只用当两个变量同时删除时,才会释放矩阵数据。因为矩阵头中引用次数标记了引用某个矩阵的次数,只有当矩阵的引用次数为0的时候才会释放矩阵数据。 1.1声明一个指定类型的Mat类
? ? ? ? Mat可以存储的数据类型包括double,float,uchar,unsigned char,以及自定义模板。 1.2通过OpenCV数据类型创建Mat类
? ? ? ? 注意:虽然在64位编译器里,uchar和CV_8U都表示8位无符号整数,但是两者有着严格的定义,CV_8U只能用于Mat类内部构建方法,如果用Mat_<CV_8U>(3,3)和Mat a(3,3,CV_8U),就会提示创建错误。 2.Mat类构造与赋值2.1 Mat类的构造(1)利用默认构造函数
????????这种构造方式不需要输入任何的参数,在后续给变量赋值的时候会自动判断矩阵的类型大小,实现灵活的存储,常用于存储读取的图像数据和某个函数的运算输出结果。 (2)根据输入矩阵尺寸和类型构造
(3)用Size()结构构造Mat类
(4)利用已有矩阵构造Mat实例
? ? ? ? 希望复制两个一模一样的Mat类而批次之间不会影响,那么可以使用m=a.clone() (5)创建已有Mat类的子类
2.Mat类的赋值(1)在构造时赋值
(2)枚举法赋值
(3)利用循环赋值
(4)利用类方法赋值
(5)利用数组进行赋值
3.Mat类支持的运算????????Mat支持加减乘除的运算,在对图像进行卷积运算时,需要两个矩阵进行乘法运算,OpenCV提供了两个Mat类矩阵的乘法运算,而且定义了两个矩阵的内积和对应位的乘法运算。
?4.Mat类元素的读取
(1)通过at方法读取Mat类矩阵中的元素
? ? ? ? 针对三通道矩阵,定义了cv::Vec3b,cv::Vec3s,cv::Vec3w,cv::Vec3d,cv::Vec3f,cv::Vec3i。b是uchar类型的缩写,s是short类型的缩写,w是ushort类型的缩写,d是double类型的缩写,f是float类型的缩写, i是int类型的缩写。 (2)通过指针ptr读取Mat类矩阵中的元素 ? ? ? ? Mat类矩阵中每一行中的每个元素都是挨着存放的,所以给出了通道指针ptr读取Mat类矩阵元素。
(3)通过迭代器访问Mat类矩阵中的元素
? ? ? ? Mat类的迭代器变量类型是cv::MatIterator_<>,在定义时同样需要在尖括号中声明数据的变量类型。Mat类迭代器的起始是Mat.begin<>(),借宿是Mat.end<>(),与其他迭代器用法相同,通过“++”运算实现指针位置向下迭代,数据的读取方式是先读取第一个元素的每一个通道,之后再读取第二个元素的每一个通道,直到最后一个元素的最后一个通道。 (4)通过矩阵元素的地址定位方式访问元素
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 14:40:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |