The class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It can be used to store (Mat类的对象用于表示一个多维度的单通道或者多通道稠密数组,它可以用来存储以下东西)

real or complex-valued vectors or matrices

实数值或复合值向量、矩阵)

(grayscale or color images

(灰度图或者彩色图)

voxel volumes

(立体元素)

vector fields

(矢量场)

point clouds

(点云)

tensors

(张量)  

histograms (though, very high-dimensional histograms may be better stored in a SparseMat )

直方图,高纬度的最好存放在SparseMat

Opencv中mat类是核心类,用于存储图像信息,主要包括两部分,矩阵头信息和矩阵的数据信息。头信息固定大小,数据信息极大。Mat类的对象进行赋值和拷贝构造时仅仅生成头信息的备份和数据指针

 cv::Mat a ;//创建矩阵头
2 a = cv::imread("xxx.jpg");//读入图像
3 cv::Mat b = a ;//复制 

b和a指向同一个矩阵,增加的时引用计数

若要实现实际上的独立赋值,需要使用mat的clone()和copyTo()函数

 cv::Mat c = a.clone();
2 cv::Mat d ;
3 c.copyTo(d);

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_(位数)+(数据类型)+C(通道数)。具体的有以下值:

CV_8UC1

CV_8UC2

CV_8UC3

CV_8UC4

CV_8SC1

CV_8SC2

CV_8SC3

CV_8SC4

CV_16UC1

CV_16UC2

CV_16UC3

CV_16UC4

CV_16SC1

CV_16SC2

CV_16SC3

CV_16SC4

CV_32SC1

CV_32SC2

CV_32SC3

CV_32SC4

CV_32FC1

CV_32FC2

CV_32FC3

CV_32FC4

CV_64FC1

CV_64FC2

CV_64FC3

CV_64FC4

  这里U(unsigned integer)表示的是无符号整数,S(signed integer)是有符号整数,F(float)是浮点数。
  例如:CV_16UC2,表示的是元素类型是一个16位的无符号整数,通道为2. C1,C2,C3,C4则表示通道是1,2,3,4
    type一般是在创建Mat对象时设定,如果要取得Mat的元素类型,则无需使用type,使用下面的depth
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
elemSize
  矩阵一个元素占用的字节数,例如:type是CV_16SC3,那么elemSize = 3 * 16 / 8 = 6 bytes
elemSize1
  矩阵元素一个通道占用的字节数,例如:type是CV_16CS3,那么elemSize1 = 16 / 8 = 2 bytes = elemSize / channels

opencv中mat类介绍的更多相关文章

  1. 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换

    在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...

  2. Opencv中Mat矩阵相乘——点乘、dot、mul运算详解

    Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...

  3. OpenCV中Mat的属性

    OpenCV中Mat的属性 最近在做一OpenCV的图像轮廓检验,但当用到霍夫变换时才发现对Mat的属性了解不足.Mat在OpenCV中的地位是及其重要的,因此有必要做一个总结. 大体上来说,Mat是 ...

  4. OpenCV中Mat的基本用法:创建、复制

    OpenCV中Mat的基本用法:创建.复制 一.Mat类的创建: 1.方法一: 通过读入一张图像,直接将其转换成Mat对象. Mat image = imread("test.jpg&quo ...

  5. OpenCV中Mat的列向量归一化

    OpenCV中Mat的列向量归一化 http://blog.csdn.net/shaoxiaohu1/article/details/8287528 OpenCV中Mat的列向量归一化 标签: Ope ...

  6. OpenCV中Mat操作clone() 与copyto()的区别

    OpenCV中Mat操作clone() 与copyto()的区别 // Mat is basically a class with two data parts: the matrix header ...

  7. opencv学习之路(4)、Mat类介绍,基本绘图函数

    一.Mat类创建 Mat img;//创建无初始化矩阵 Mat img1(,,CV_8UC1);//200行,100列(长200,宽100) Mat img2(Size(,),CV_8UC3,Scal ...

  8. opencv关于Mat类中的Scalar()---颜色赋值

    这个 CvScalar就是一个可以用来存放4个double数值的数组(O'Reilly的书上写的是4个整型成员):一般用来存放像素值(不一定是灰度值哦)的,最多可以存放4个通道的. typedef s ...

  9. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

随机推荐

  1. Jquery的jqzoom插件的使用(图片放大镜)

    今天学习一下,图片放大镜功能,需要使用插件JQzoom 引入文件 <script type="text/javascript" src="js/jquery.min ...

  2. JS--label语句的使用

    使用label语句可以在代码中添加标签,以便将来使用. 一般与for循环一起使用 如: var num = 0; outermost: for(var i=0;i<10;i++){ for(va ...

  3. PC/FORTH定点原理

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  4. linux系统安装tomcat详细配置

    1.通过ssh工具将apache-tomcat-7.0.85.tar.gz拖拽到 /home文件下 2.切换到/home 目录下 3.解压 指令 tar -zvxf apache-tomcat-7.0 ...

  5. SQL-5查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工

    输出描述: 题目描述 查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工CREATE TABLE `dept_emp` (`emp_ ...

  6. 乘法“*”和点乘“.*”&除法“/”和点除“./”区别

    reference:https://blog.csdn.net/xiaotao_1/article/details/79026406 一,*和.*的联系和区别.  1,在进行数值运行和数值乘矩阵,这两 ...

  7. 一次Web请求返回406原因与解决方案

    ajax请求,响应信息返回的却是报错406,. 1.断点调试,进入对应处理方法,且得到正确信息返回到解析器.使用的是ssm,前端ftl 2.js将返回错误信息打出来,类似为: 百度406错误出现的原因 ...

  8. innodb mvcc,事务隔离级别,读写锁

    mvcc其实和copyonwritelist的思路差不多:读不加锁,写加锁,事务提交之后释放锁,并且延伸的是,在UNdolog里面保存了几个版本,实现不同的隔离级别.如果读数据页里面最新的数据,那么就 ...

  9. MVC4实现批量更新数据

    Html: @using (Html.BeginForm("Edit", "Home")) { <div> <input type=" ...

  10. day 96 关于分页的使用

    分页的学习主要四步骤 from django.db import models # Create your models here. class Book(models.Model): title = ...