01.cv::Mat类简介

cv::Mat用于大型矩阵类型,这可以说是Opencv库整个c++实现的核心类。OpenCV库中绝大多数函数都是cv::Mat类的成员函数,或者以cv::Mat作为参数,或者以cv::Mat作为返回值,而利用OpenCV做各类计算机视觉的任务,Mat类型的矩阵数组更是必须要了解的,接下来我将详细的为大家分析该种类型的内部逻辑。

cv::Mat类用于表示任意维度的dense数组。大多数图像数据都是存储在dense数组中,当然与之对应的就是sparse数组。

dense数组:对于数组中的每个元素,内存中都存储了一个与当前元素对应的数据值,即使该元素值为零。

sparse数组:存储的是非零项。如果许多元素值实际上为零,那么这会节省大量存储空间。(Opencv中永cv::SpareseMat类表述sparse数组。)

Note:若你对opencv2.1之前的版本较熟悉,你可能记得IplImage,CvMat。但在之后的版本中,这些类都没了,都被cv::Mat取代。

02. cv::Mat类对象创建——构造函数法

//生成的是2维(3*10),3通道数组,并初始化所有元素为0

cv::Mat m( 3, 10, CV_32FC3, cv::Scalar::all( 0 ));

该种创建Mat数组的方式不指定维度,所有维度默认为二维。若需要创建多维数组,则需要利用上述的第二种方式(后文在阐述),参数详解:。

3:表示的是创建的二维数组,第一维(行)为3。

10:表示的是创建的二维数组,第二维(列)为10。

cv::Scalar::all( 0 ):表示将数组所有元素初始化为0。

CV_32FC3:表示数组元素为32位浮点型,通道数为3。

CV32FC3这个参数,即指定了元素类型,也指定了通道数。所有可能的类型都在头文件中定义了,一共有6*4=24种组合:CV{8U,16S,16U,32S,32F,64F}{1,2,3,4}。这些格式的具体解释如下:

CV_(S|U|F)C

1--bit_depth:比特数

8bit, 16bit, 32bit, 64bit

举例说明:

若创建一个用于存储灰度图的Mat对象,且当前图像

宽高为:10*10。则该灰度图有100个像素点,且其

每个像素点所占用的内存空间为8bit,因此这种数据

就被定义为CV_8...

2--S|U|F--S--代表---signed int---有符号整型

U--代表--unsigned int--无符号整型

F--代表--float---------单精度浮点型

3--C----代表---数据的通道数,比如:

1--单通道数组(如灰度图片)

2--双通道数组

3--三通道数组(如RGB彩色图像)

4--四通道数组(如带Alph通道的RGB图像)

//生成的是3维度(3*3*3),3通道数组,并初始化所有元素为0

int sz[] = { 3, 3, 3 };

cv::Mat m(3, sz, CV_32FC3,cv::Scalar::all( 0 ));

上一个例子中没有指定数组维度,因此默认为2维数组。然而在某些例子中需要用到多维数组,因此需要指定数组的维数。代码各参数详解如下:

int sz[] = { 3,4,5 }: 该参数用来指定多维数组各个维度的维度值,本例中表示三维数组的行为3,列为4,纵向为5。

3:根据用户需要创建的维数指定,本例中创建三维数组,而且上个参数int sz[] = { 3, 4, 5 },大括号内参数的个数要等于当前参数:3。

sz:将预先定义好的多维度中每个维度的大小输入。

CV_32FC3:同上。

cv::Scalar::all( 0 ):同上。

03.cv::Mat类对象创建——成员函数法

//创建一个大小为rows×cols的cv :: Mat,其中所有的值为类型为type(CV_32F等)的零

cv::Mat::zeros( rows, cols, type );

//创建一个大小为rows×cols的cv :: Mat,其中所有的值为类型为type(CV_32F等)的一

cv::Mat::ones( rows, cols, type);

//单位矩阵

cv::Mat::eye( rows, cols, type);

利用Mat类提供的成员函数可以创建一些特定类型的数组,该方案相对比较简单,就不做过多解释了。

04.两张图告诉你维度和通道的区别

上面利用构造过程创建数组的两个方法中,提到了多维度和多通道,那么维度和通道之间到底有什么区别呢?下面两张图(画了好久....)能够清晰的告诉你两者的区别。

图一:维度为2(只有X,Y),通道为3。

图二:维度为3(有X,Y,Z),通道为3。

所以我们传统意义上的彩色图像(RGB三通道),维度为2,就是如图一所示的结构。(不用在意图中的0,1数字那是随便画上去的~)

人到了一定岁数,自己就得是那个屋檐,再也没有地方可以躲雨。

——致自己

计算机视觉一定要学opencv吗,Opencv | 学计算机视觉不得不了解的 Mat 类相关推荐

  1. 小白学python(opencv模糊)

    小白学python(opencv模糊) 模糊 均值模糊 中值模糊 自定义模糊 高斯模糊 双边模糊 今天稍微学学模糊有关知识,发出来记录以一下. 模糊 #像的模糊是图像处理中比较常用和简单的处理手段之一 ...

  2. Opencv学习笔记_计算机视觉是什么?Opencv的起源

    从0开始学习"OPENCV"第一天-概述 在学习任何一门新的语言或者框架时都应该了解这个行业的背景知识,正所谓工欲善其事,必先利其器! 一.Opencv概述 1.      什么是 ...

  3. 视频教程-OpenCV图像分割实战视频教程-计算机视觉

    OpenCV图像分割实战视频教程 贾志刚 2004毕业于山东大学齐鲁软件学院,软件工程专业.专注于图像处理算法学习与研究,计算机视觉OpenCV开发应用,深度学习在计算机视觉领域应用.书籍<Ja ...

  4. 学了那么久的计算机视觉,竟然还不懂YOLO?!

    在人工智能机器学习的领域中,目前最火的莫过于计算机视觉了,这项技术一直广受关注,而其中的目标检测是计算机视觉领域中最常见的问题之一. 从去年的 YOLOv4 发布后,目标检测框架被问的最多的问题就是: ...

  5. [python opencv 计算机视觉零基础到实战] 一 opencv的helloworld

    前置条件 说明:本系列opencv实战教程将从基础到实战,若只是简单学习完python也可以通过该教程完成一般的机器学习编程:文中将会对很多python的基础内容进行讲解,但由于文章定位的原因将不会赘 ...

  6. OpenCV开发团队开源计算机视觉标注工具CVAT

    OpenCV开发团队开源计算机视觉标注工具Computer Vision Annotation Tool (CVAT) 同时支持图像和视频的标注,最大特点是专业!专业团队做的专业水准的工具! (关注& ...

  7. 计算机视觉之OpenCV教程 ---Mat类基础(一)

    机器视觉之OpenCV教程图像容器Mat类基础一(一) 零.OpenCV概述 基本上在机器识别的领域 ,都有OpenCV的身影 . OpenCV中基本上包含了所有的机器视觉所用到的算法 , 即使没有也 ...

  8. 人工智能适合女生学吗?女生学AI

    人们对于IT.程序员.人工智能这类词的固有印象是男生的行业,近年来人工智能AI逐渐成为国家未来发展的一个重要战略,许多人也纷纷开始投身进入这个行业,人工智能适合女生学吗?女生学AI怎么样?其实这几年进 ...

  9. OpenCV图像处理——opencv简介(一)

    OpenCV图像处理 文章目录 OpenCV图像处理 前言 一.OpenCV是什么? 二.OpenCV-python开发 三.开发环境 总结 前言 酷爱图像处理,但是并没有系统的学习过opencv,只 ...

最新文章

  1. python中的协程(二)
  2. 专题 16 基于UDP的通信程序设计
  3. Spring Cloud Netflix Eureka client源码分析
  4. linux字体栅格化,响应式开发---网页的布局方式、媒体查询、栅格化布局、less语言...
  5. java编程能做什么_学习Java编程能做什么工作?
  6. Jupyter notebook 使用过程中的一些小技巧总结
  7. oracle sql 执行计划分析_从Oracle数据库实验来看索引的常见执行计划
  8. poj 2870 Light Up(dfs+剪枝,写的稀烂)
  9. python xml.etree.ElementTree
  10. Spring 整合 Redis
  11. java8 32位和64位资源分享 Windows 版本:8u311
  12. 如何判断矩阵的谱半径 C语言,矩阵谱半径
  13. 什么是生成器 — 一篇文章让你看懂
  14. 在 Android Studio 里面运行标准 Java 工程
  15. Unity MMORPG游戏的设计(一)前期简单分析
  16. Office Web App服务器的配置
  17. 嵌入式设备的网络性能该如何分析
  18. 大二计算机专业可以进实验室吗,计算机科学论坛--关于北大CS报考、复试以及实验室综合答疑,08考生必看[原创]...
  19. [bzoj5314][Jsoi2018]潜入行动_树形背包dp
  20. putty的下载安装和使用

热门文章

  1. C语言中PURGE用法,使用Purge_dups去冗余序列
  2. matlab将单词China译成密码,把 China 译成密码
  3. 2021年陕西高考英语作文成绩查询,2021陕西高考英语作文多少分满分?
  4. CSS--爱心怦怦跳
  5. Kali_Linux 中文乱码 修改更新源及更新问题
  6. [附源码]java毕业设计医学季节性疾病筛查系统
  7. Python简史:开发者的小副业如何成为全球最热编程语言?
  8. 决策树经典算法ID3——我的第一篇博客
  9. 【调剂】北京信息科技大学2022年接收硕士研究生调剂公告
  10. 关于SCSS你知道多少?了解和基本使用/语法(教程)