博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++下的OpenCV中Mat类型存储的图像格式
阅读量:5820 次
发布时间:2019-06-18

本文共 2025 字,大约阅读时间需要 6 分钟。

1. Mat数据类型

Mat定义

是一个类,由两个数据部分构成,矩阵头(包含矩阵尺寸,存储方法,存储地址等等)和一个指向存储所有像素值的矩阵的指针

成员变量

int cv::Mat::cols;     //返回矩阵的列数 int cv::Mat::rows      // 返回矩阵行数 uchar* cv::Mat::data   // 指向矩阵的数据单元的指针 int cv::Mat::dims      // 返回矩阵维度,该维度≥2 MatSize cv::Mat::size  // 返回矩阵大小

成员函数

获取图片高度:mat_name.cols

获取图片宽度:mat_name.rows
获取图像位深度,(即矩阵元素的存储方式,存储每个像素所用的位数):

mat_name.depth()

获取矩阵通道的数目:

mat_name.channnels()

获取存储的矩阵元素的数据类型(包括位深度,通道数,数据类型):

mat_name.type()

创建二维Mat对象

Mat Matrix_name(行数,列数,存储元素的数据类型,每个矩阵点的通道数)

存储元素的数据类型

CV_[位数][带符号与否][类型前缀]C[通道数]

带符号与否:S为符号整型,U为无符号整型,F为浮点型

例如CV_8UC3

通道数

Scalar是一个short型的向量,能够使用指定的定制化值来初始化矩阵,还可以用来表示颜色

2. 图像格式

图像深度

图像位深度=比特数+数据类型

C++中OpenCV库的获取方式:(函数原型)

int Mat::depth()

下表是返回值以及对应含义

图像深度 枚举数值 空间大小 范围 等同C++变量
CV_8U 0 8bits 0~255 unsigned char
CV_8S 1 8bits -128~127 char
CV_16U 2 16bits 0~65535 ushort,unsigned short int,unsigned short
CV_16S 3 16bits -32768~32767 short,short int
CV32S 4 32bits -2147483648~2147483647 int,long
CV32F 5 32bits 1.18e-38~3.40e38 float
CV_64F 6 64bits 2.23e-308~1.79e308 double
CV_USRTYPE1 7 -

图像通道数

C++中OpenCV库的获取方式:(函数原型)

int Mat:channels()

图像类型

图像类型=比特数+数据类型+通道数

存储元素的数据类型:

CV_[位数][带符号与否][类型前缀]C[通道数]

带符号与否:S为符号整型,U为无符号整型,F为浮点型

C++中OpenCV库的获取方式:(函数原型)

int Mat:type()

具体数据类型与返回值关系:

C1 C2 C3 C4
CV_8U 0 8 16 24
CV_8S 1 9 17 25
CV_16U 2 10 18 26
CV_16S 3 11 19 27
CV_32S 4 12 20 28
CV_32F 5 13 21 29
CV_64F 6 14 22 30
用户定义 7

单个元素的访问

使用at方式进行访问,在at的时候需要指定的数据类型对照表如下:

种类 C1 C2 C3 C4 C6
uchar8U uchar cv::Vec2b cv::Vec3b cv::Vec4b
char8S
ushort16U
short16S short cv::Vec2s cv::Vec3s cv::Vec4s
int32S int cv::Vec2i cv::Vec3i cv::Vec4i
float32F float cv::Vec2f cv::Vec3f cv::Vec4f cv::Vec6f
double64F double cv::Vec2d cv::Vec3d cv::Vec4d cv::Vec6d

示例如下:

cv::Vec3b vec3b      = img.at
(0,0);uchar vec3b0 = img.at
(0,0)[0];uchar vec3b1 = img.at
(0,0)[1];uchar vec3b2 = img.at
(0,0)[2];std::cout<<"vec3b = "<
<
<<"vec3b0 = "<<(int)vec3b0<
<<"vec3b1 = "<<(int)vec3b1<
<<"vec3b2 = "<<(int)vec3b2<

转载地址:http://muzdx.baihongyu.com/

你可能感兴趣的文章
oracle导入导出小记
查看>>
聊一聊log4j2配置文件log4j2.xml
查看>>
NeHe OpenGL教程 第七课:光照和键盘
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
CodeIgniter 3.0 新手捣鼓源码(一) base_url()
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
vSphere 6将于2月2日全球同步发表
查看>>
Android状态栏实现沉浸式模式
查看>>
让你的APP实现即时聊天功能
查看>>
iOS 绝对路径和相对路径
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>