OpenCV中Mat的使用
一、数字图像存储概述
数字图像存储时,我们存储的是图像每个像素点的数值,对应的是一个数字矩阵。
二、Mat的存储
1、OpenCV1基于C接口定义的图像存储格式IplImage*,直接暴露内存,如果忘记释放内存,就会造成内存泄漏。
2、从OpenCV2开始,开始使用Mat类存储图像,具有以下优势:
(1)图像的内存分配和释放由Mat类自动管理
(2)Mat类由两部分数据组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。Mat在进行赋值和拷贝时,只复制矩阵头,而不复制矩阵,提高效率。如果矩阵属于多个Mat对象,则通过引用计数来判断,当最后一个使用它的对象,则负责释放矩阵。
(3)可以使用clone和copyTo函数,不仅复制矩阵头还复制矩阵。
三、Mat创建
1、使用Mat构造函数
Mat test(2,2,CV_8UC3,Scalar(0,0,255));
2、使用Mat构造函数2
int sizes[3] = {2,2,2};
Mat test(3,sizes,CV_8UC3,Scalar::all(0));
3、为已存在的IplImage指针创建信息头
IplImage* img = cvLoadImage("1.jpg",1);
Mat test(img);
4、利用create函数
Mat test;
test.create(4,4,CV_8UC2);
5、采用Matlab形式的初始化方式
(1)Mat me = Mat::eye(4,4,CV_64F);
(2)Mat mo = Mat::ones(2,2,CV_32F);
(3)Mat mz = Mat::zeros(3,3,CV_8UC1);
注:元素类型,即CV_[位数][带符号与否][类型前缀]C[通道数]
四、Mat中相关成员的意义
1、data
Mat对象中的一个指针,指向存放矩阵数据的内存(uchar* data)
2、dims
矩阵的维度,3*4的矩阵维度为2维,3*4*5的矩阵维度为3维
3、channels
矩阵通道,矩阵中的每一个矩阵元素拥有的值的个数,比如说 3 * 4 矩阵中一共 12 个元素,如果每个元素有三个值,那么就说这个矩阵是 3 通道的,即 channels = 3。常见的是一张彩色图片有红、绿、蓝三个通道。
4、depth
深度,即每一个像素的位数,也就是每个通道的位数。在opencv的Mat.depth()中得到的是一个0 – 6的数字,分别代表不同的位数:enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 },可见 0和1都代表8位, 2和3都代表16位,4和5代表32位,6代表64位。
5、elemSize
矩阵中每个元素的大小,每个元素包含channels个通道。如果Mat中的数据的数据类型是CV_8U那么elemSize = 1;是CV_8UC3那么elemSize = 3,是CV_16UC2那么elemSize = 4。
6、elemSize1
矩阵中数据类型的大小,即elemSize/channels,也就是depth对应的位数。
7、step
是一个数组,定义了矩阵的布局,参考下图


若矩阵有n维,则step数组大小为n
step[n-1] = elemSize(每个矩阵元素的数据大小)
step[n-2] = size(1维)*elemSize
step[n-3] = size(2维)*size(1维)*elemSize
...
step[0] = size(n-1维)*size(n-2维)*...size(1维)*elemSize
8、step1
step1也是一个数组,为step/elemSize1,若矩阵有n维,则step1[n-1] = channels。
9、type
矩阵元素的类型,即创建Mat时传递的类型,例如CV_8UC3、CV_16UC2等。
OpenCV中Mat的使用的更多相关文章
- OpenCV中Mat的列向量归一化
OpenCV中Mat的列向量归一化 http://blog.csdn.net/shaoxiaohu1/article/details/8287528 OpenCV中Mat的列向量归一化 标签: Ope ...
- Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...
- opencv中mat类介绍
The class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It ...
- OpenCV中Mat操作clone() 与copyto()的区别
OpenCV中Mat操作clone() 与copyto()的区别 // Mat is basically a class with two data parts: the matrix header ...
- OpenCV中Mat的属性
OpenCV中Mat的属性 最近在做一OpenCV的图像轮廓检验,但当用到霍夫变换时才发现对Mat的属性了解不足.Mat在OpenCV中的地位是及其重要的,因此有必要做一个总结. 大体上来说,Mat是 ...
- OpenCV中Mat的基本用法:创建、复制
OpenCV中Mat的基本用法:创建.复制 一.Mat类的创建: 1.方法一: 通过读入一张图像,直接将其转换成Mat对象. Mat image = imread("test.jpg&quo ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- opencv中Mat类型数据操作与遍历
Mat作为opencv中一种数据类型常常用来存储图像,相对与以前的IplImgae类型来说,Mat类型省去了人工的对内存的分配与释放,转而自动分配释放.Mat Class主要包括两部个数据部分:一个是 ...
- OpenCV中Mat总结
一.数字图像存储概述 数字图像存储时,我们存储的是图像每个像素点的数值,对应的是一个数字矩阵. 二.Mat的存储 1.OpenCV1基于C接口定义的图像存储格式IplImage*,直接暴露内存,如果忘 ...
随机推荐
- Dart 的function
方法的定义 返回类型 方法名 (参数1 ,参数2 ,...){ 方法体 返回值 } => 的使用
- Python:从入门到实践--第十一章--测试代码--练习
#1.城市和国家:编写一个函数,它接受两个形参:一个城市名和一个国家名. #这个函数返回一个格式为City,Country的字符串,如Santiago,Chile.将这个函数 #存储在一个名为city ...
- 03MYSQL数据库
mySQL 数据库 储存数据,属于中小型数据库 默认端口号 3306 密码root sql是一门编程语言 结构化查询语言 是强类型语言(定义变量时要指定变量类型) 字符串有两种类型: 定长: ...
- Linux之prink原理
我的分析是基于Linux4.15.1 1.看看kernel是如何调用到console初始化函数的: 分两条线: a.start_kernel --> console_init --> ...
- python excle读
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/4/24 9:57 # @File : Excel读.py # @Softwa ...
- 创建一个dynamics 365 CRM online plugin (八) - 使用Shared Variables 在plugins 之前传递data
CRM 可以实现plugin之前的值传递. 我们可以使用SharedVariables 把值在plugin之间传递 实现plugins之间的传递非常简单,我们只需要用key value pair来配对 ...
- tolua 转换 std::shared_ptr
tolua 转换 std::shared_ptr 自从c++11以后std::shared_ptr几乎是比用的东西,经常会遇到类似如下应用 std::shared_ptr<Tst_ShareTe ...
- linux的使用以及linux服务器应用的部署
一.Linux(rehat.centos.ubuntu...)基础知识 上午: putty软件连接linux服务器: [root @ foundation2 ~ ] # 用户名 ...
- 利用工具将数据库中的表导出到word中
1.动软代码生成器 效果图: 数据库设计说明书中的一项,刚好我负责写这个文档, 18张表,前两张表是自己画表格自己填充内容,写到第三张表的时候就已经崩溃了(我觉得我耐力还是够的,怎么说也画完了两张表呢 ...
- C语言字符串定义(数组&指针)
/***************************************************************************** * @brief : 字符串定义方法总结 ...