OpenCV Mat基础认知感

9 篇文章 0 订阅
2 篇文章 0 订阅

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 就没那么容易了,但也是习惯和熟练度问题,一旦形成经验,自然也知道这些值所表达的意思。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值