OpenCV是一个开源的供开发的计算机视觉处理库,涵盖的内容包括图像处理,机器学习。由c到c++ ,再到各平台的跨平台框架。

Mat - 图像容器

Mat类用于表示一个多维的单通道或者多通道的稠密数组。能够用来保存实数或复数的向量、矩阵,灰度或彩色图像,立体元素,点云,张量以及直方图(高维的直方图使用SparseMat保存比较好)。简言之,Mat就是用来保存多维的矩阵的。

在接口层面上,Mat是OpenCV进行图像处理的基本结构定义。可以简单的理解为就是一个图片抽象类,但它不只表示图像、还能表示立体、矩阵。

Mat属性

  • data uchar型的指针。Mat类分为了两个部分:矩阵头和指向矩阵数据部分的指针,data就是指向矩阵数据的指针。

  • dims 矩阵的维度,例如5*6矩阵是二维矩阵,则dims=2,三维矩阵dims=3.

  • rows 矩阵的行数(平常我们说的图像的高度)

  • cols 矩阵的列数(平常我们说的图像的宽度)

  • size 矩阵的大小 (简单理解为图像的像素点),size(cols,rows),如果矩阵的维数大于2,则是size(-1,-1)

  • channels 矩阵元素拥有的通道数,例如常见的彩色图像,每一个像素由RGB三部分组成,则channels = 3

  • type
    表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位数)+(数据类型)+(通道数)。具体如下:

    U(unsigned integer)表示的是无符号整数,S(signed integer)是有符号整数,F(float)是浮点数。例如:CV_32F就表示浮点数。
    值得说明的是上表中的具体值、值、值,是指OpenCV中对这些值的类型做了一次枚举定义,枚举出来的值也就是上表中的值。不要混淆了。 如:CV_8UC1 = 0 ,CV_8SC1 = 1

  • depth
    矩阵中元素的一个通道的数据类型,这个值和type是相关的。例如 type为 CV_16SC2,一个2通道的16位的有符号整数。那么,depth则是CV_16S。depth也是一系列的预定义值,
    将type的预定义值去掉通道信息就是depth值:
    CV_8U CV_8S CV_16U CV_16S CV_32S CV_32F CV_64F,同理,它的具体值也分别定义为:
    CV_8U = 0,
    CV_8S = 1,
    CV_16U = 2,
    CV_16S = 3,
    CV_32S = 4,
    CV_32F = 5,
    CV_64F = 6,
    CV_USRTYPE1 = 7;

  • elemSize
    矩阵 一个元素占用的字节数,例如:type是CV_16SC3,那么elemSize = 3 * 16 / 8 = 6 bytes

  • elemSize1
    矩阵元素 一个通道 占用的字节数,例如:type是CV_16CS3,那么elemSize1 = 16 / 8 = 2 bytes = elemSize / channels

type 和 depth

  1. Mat depth,不要和图片的位深度混淆了,在mat里面,这个属性代表的是Mat中的数据类型,例如无符号 CV_8S。
  2. type 它即包含了depth,也包含了chanel,从字面意思上是比较容易理解,但到具体值的时候,恐怕看代码就不如意了,但只要理解这层关系,逆向看也能知道是什么意思。例如CV_8UC1,很自然,这个表达了一个通道的数据,且数据类型是CV_8U。CV_8UC1 = 0,只看0 就没那么容易了,但也是习惯和熟练度问题,一旦形成经验,自然也知道这些值所表达的意思。

OpenCV Mat基础认知感相关推荐

  1. opencv Mat类

    本博客转载于这里! Mat 基础 图片在计算机中的本质就是一个数组.其中 Mat 就是在 OpenCV 中图像的表示形式,因此简单介绍 Mat 中一些常用的基础知识. 其中 Mat 类中有一些基本属性 ...

  2. OpenCV Mat 简介

    OpenCV Mat 简介 Part I Mat是OpenCV最基本的数据结构,Mat即矩阵(Matrix)的缩写,Mat数据结构主要包含2部分:Header和Pointer.Header中主要包含矩 ...

  3. 【AI白身境】搞计算机视觉必备的OpenCV入门基础

    文章首发于微信公众号<有三AI> [AI白身境]搞计算机视觉必备的OpenCV入门基础 今天是新专栏<AI白身境>的第五篇. 曾经看过一个视频,树莓派自平衡机器人自动追着小球跑 ...

  4. OpenCV Mat类详解和用法(官网原文)

    参考文章:OpenCV Mat类详解和用法 我马克一下,日后更 官网原文链接:https://docs.opencv.org/3.2.0/d6/d6d/tutorial_mat_the_basic_i ...

  5. opencv 画矩形_图像处理之OpenCV的基础使用补充

    基础到进阶,跨度有点大,我们还是先踏实基础吧.对图像的处理实际上还是对图像像素矩阵的处理,当然还需要点想象空间.上一篇文章我们介绍了opencv的最基本用法,能够实现图片的加载.生成.读取像素矩阵.三 ...

  6. OpenCV Mat类详解和用法

    OpenCV Mat类详解和用法 我们有多种方法可以获得从现实世界的数字图像:数码相机.扫描仪.计算机体层摄影或磁共振成像就是其中的几种.在每种情况下我们(人类)看到了什么是图像.但是,转换图像到我们 ...

  7. opencv入门基础(c++)【二】

    opencv入门基础(c++) 七.绘制形状与文字 7.1使用cv::Point与cv::Scalar 7.2绘制线.矩形.园.椭圆等基本几何形状 绘制线 绘制矩形 绘制椭圆 绘制圆 绘制填充图形 7 ...

  8. pybind opencv mat

    如果c++中frame裁剪了,把裁剪的图传给python,图片会出现乱码,解决方法: crop后再进行 mat.clone(),返回pyhon就可以了. 这个也可以参考: https://blog.c ...

  9. c++ opencv mat 最大值,数据类型

    这个好像对的: cv::Mat image0 = cv::imread("../configs/bus.jpg", cv::IMREAD_UNCHANGED);cv::Mat ds ...

最新文章

  1. python图表交互控件_用djang中的交互式控件制作bokeh图表
  2. News | 经有限数据研究显示瑞德西韦有望治疗冠状病毒患者
  3. 关于权限五张表的独到见解
  4. python多线程实现访问页面_python 多线程实现网页自动截图
  5. NeurIPS 2018 | 基于自监督学习的视听觉信息同一性判断
  6. Lambda表达式和闭包Closure
  7. 聊聊编程那些破事-0.Prehistory
  8. 可见光迁移——学习笔记
  9. android默认壁纸的历史,Android 默认壁纸 简单分析
  10. 五款不错的Web前端开发工具,对小白来说完全够用了!
  11. ArcGIS如何进行拓扑检查
  12. 第十一篇,看门狗定时器编程
  13. OperationTrident游戏开发总结
  14. dotnet OpenXML 读取 PPT 主序列进入退出强调动画
  15. 引流的最快方法是什么?我是如何实现长期被动引流的
  16. 【基于通道-空间注意的高分辨率锐化】
  17. 聊一聊回收科技那些事儿
  18. 老男孩之猛龙过江电影高清版迅雷下载
  19. 看过《非你莫属》那期,因为刘俐俐,说说陈鸥
  20. 华为云设计语言_多云架构落地设计和实施方案【华为云分享】

热门文章

  1. ruby 生成哈希值_如何检查Ruby中是否存在哈希键?
  2. ReactNative环境搭建扩展篇——安装后报错解决方案
  3. ASP.NET MVC 5调用其他Action
  4. Python计算校验文件的MD5、SHA1、SHA256和CRC32,获取文件创建日期、修改日期和文件大小
  5. 手把手带你玩转Tensorflow 物体检测 API (2)——数据准备
  6. java重命名package_AndroidStudio怎么重命名java目录下的包名(如cn.zsn.app)
  7. 生物学专业_江南大学微生物学(发酵)20002008历年考研专业课真题汇编
  8. linux内核网络raw_cpu_add,深入理解Linux网络技术内幕-设备注册和初始化(四)
  9. 微型计算机技术及应用 考试,陕西理工学院微型计算机技术及应用考试试卷(5份)...
  10. 浮点加法器计算机组成原理,计算机组成原理 第二章运算方法与运算器