OpenCV3之Mat类的类型type和深度depth
文章目录
- 一、Mat类的类型CV_8UC1
- 1.CV_8UC1
- (1)格式
- (2)意思
- ①深度的位数
- ②符号类型
- ③`C`
- ④cn通道数
- (3)深度类型depth()
- (4)常用的
- (5)映射图像
- 2.CV_8U
- (1)用处1:只指定深度类型
- (2)等同于CV_XXC1
一、Mat类的类型CV_8UC1
1.CV_8UC1
用处:指定深度和通道数
(1)格式
CV_<depth深度><符号类型>C<cn通道数>
(2)意思
①深度的位数
取值是8
,16
,32
,64
这个就是存储的二进制位数
②符号类型
只有三个值:S
,U
,F
- S:signed int 有符号整形
- U:unsigned int 无符号整形
- F:float 单精度浮点型
③C
表示通道,写出来只是为了分割前后两个数字,以免混淆。
④cn通道数
取值可以是1
,2
,3
,4
1
:单通道图像,即灰度图片2
:2通道图像,傅里叶变化会用到3
:3通道图像,即RGB彩色图像4
:4通道图像,即带Alph通道的RGB图像。
PNG图像是一种典型的4通道图像。alpha通道可以赋值0到1,或者0到255,表示透明到不透明。
(3)深度类型depth()
#define CV_8U 0
#define CV_8S 1
#define CV_16U 2
#define CV_16S 3
#define CV_32S 4
#define CV_32F 5
#define CV_64F 6
#define CV_USRTYPE1 7
可以用函数int Mat::depth()
获得。
Mat A(3,4,CV_8UC3);
cout << A.depth() << endl;
// 0Mat B(3,4,CV_32FC1);
cout << B.depth() << endl;
// 5
深度类型对应单位
深度类型 | 单位 |
---|---|
CV_8U |
unsigned char ,uchar ,uint8_t
|
CV_8S |
char ,int8_t
|
CV_16U |
ushort
|
CV_16S |
short
|
CV_32S |
int
|
CV_32F |
float
|
CV_64F |
double
|
(4)常用的
CV_8UC1
:深度8位的无符号整型(U
),通道数为1CV_8UC3
:深度8位的无符号整型(U
),通道数为3CV_32FC1
:深度32位的单精度浮点型(F
),通道数为1CV_32FC3
:深度32位的单精度浮点型(F
),通道数为3
(5)映射图像
imshow()
函数在显示图像时,会将各种类型的数据都映射到[0, 255]
。不能显示2通道的图像,1,3,4都可以
如果载入的图像是:
CV_8U
- 8-bit unsigned integers ( 0…255 ), [ 0 , 2 8 ] = [ 0 , 255 ] [0,2^8]=[0,255] [0,28]=[0,255],即就显示图像本来的样子。CV_8S
- 8-bit signed integers ( -128…127 )CV_16U
- 16-bit unsigned integers ( 0…65535 ), [ 0 , 2 1 6 ] = [ 0 , 255 × 256 ] [0,2^16]=[0,255\times 256] [0,216]=[0,255×256],则便用像素值除以256。CV_16S
- 16-bit signed integers ( -32768…32767 )CV_32S
- 32-bit signed integers ( -2147483648…2147483647 )CV_32F
- 32-bit floating-point numbers ( -FLT_MAX…FLT_MAX, INF, NAN ), [ 0 , 1.0 ] [0,1.0] [0,1.0],则像素值便要乘以255CV_64F
- 64-bit floating-point numbers ( -DBL_MAX…DBL_MAX, INF, NAN )
2.CV_8U
(1)用处1:只指定深度类型
有的地方只需要深度类型,比如卡尔曼滤波KalmanFilter
的void init(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);
(2)等同于CV_XXC1
Mat中type函数输出的值:
- 单通道时,就是对应相关
depth()
。 - 2个通道时,则相关
depth()
再加上8; - 3个通道时,则相关
depth()
再加上16; - 4个通道时,则相关
depth()
再加上24。
所以CV_8U
等同于CV_8UC1
// 单通道
Mat A(2, 1, CV_8U);
cout << A.type() << endl;
// 0// 双通道
Mat B(2, 1, CV_8UC2);
cout << B.type() << endl;
// 8
Reference:
学习OpenCV2——Mat之通道的理解
OpenCV3之Mat类的类型type和深度depth相关推荐
- 【OpenCV3】cv::Mat类成员函数详解
cv::Mat为OpenCV2和OpenCV3中最重要的类,可以毫不夸张得说,掌握了cv::Mat的操作,就掌握了OpenCV大半,这里将详细的介绍下cv::Mat类的成员函数及其使用. 1.clon ...
- python的opencv的图像对象存储的颜色通道_OpenCV大型阵列类型Mat类
一.Mat类 Mat类是C++实现的OpenCV库的核心,表示一个N维度单通或多通道阵列,可以用来存储实数或复数值向量和数组,灰度或彩色图像,向量场,张量及直方图(当然高纬度的直方图存储在稀疏Mat类 ...
- OpenCV 之 Mat 类
数字图像可看作一个数值矩阵, 其中的每个元素代表一个像素点,如下图所示: OpenCV 中,用 Mat 来表示该数值矩阵,它是很关键的一种数据结构,因为 OpenCV 中的大部分函数都和 Mat 有关 ...
- 【从零学习OpenCV 4】Mat类构造与赋值
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...
- java OpenCv Mat 类的基本操作(3)
对初学者来说,我们总是希望通过Opencv实现一些功能,当我们去研究一个陌生的东西,我们总是想着利用他去实现某一个功能 比如Opencv,我们很容易利用他去进行人脸识别,人脸识别也有很多的方式比如利用 ...
- OpenCV数据结构与基本绘图(Mat 类、Point类、Scalar类等)
文章目录 1.基础图像容器 Mat 1.1Mat 结构的使用 1.2像素值的存储方法 1.3 显示创建 Mat 对象的七种方法 1.3.1 Mat 的常用构造函数 1.4 OpenCV 中的格式化输出 ...
- opencv Mat类
本博客转载于这里! Mat 基础 图片在计算机中的本质就是一个数组.其中 Mat 就是在 OpenCV 中图像的表示形式,因此简单介绍 Mat 中一些常用的基础知识. 其中 Mat 类中有一些基本属性 ...
- 如何将OpenCV中的Mat类绑定为OpenGL中的纹理
https://blog.csdn.net/TTTTzTTTT/article/details/53456324 如果要调用外接的USB摄像头获取图像通常使用OpenCV来调用,如何调用摄像头请参考本 ...
- OpenCV参考手册之Mat类详解1
Mat类 OpenCV c + + n 维稠密数组类 class CV_EXPORTS Mat { public: / / - -很多的方法... ... /*!包括几位字段: -神奇的签名 -连续性 ...
最新文章
- Struts2与Webwork2的区别
- dfs-Rank the Languages
- 关于打印机共享的注意事项——又被叫去修电脑了
- c获取当前系统时间_Python系统:程序和进程
- 考前自学系列·计算机组成原理·查询方式/中断方式/DMA方式的适用范围及判断
- 7.4.7 2DPCA
- CRM_OPPORT_TEXT_DETER_STANDARD
- 和谐社区,和谐技术:微软的宠儿们,为什么富人的孩子就不能早当家?
- 基于Microsoft Translator API的vim翻译插件
- 盈不足术与老鼠打洞问题的近似解
- C# 将MDI窗口嵌入普通窗口
- 计量经济学第6章计算机c4,伍德里奇计量经济学第6章部分计算机习题详解STATA.pdf...
- Qt Creator 安装 VLD
- ACM比赛代码文件读写调试方案
- 架构设计:网络附属存储NAS,块存储EBS与对象存储OSS的比较以及选用
- 笔记本电脑外接显示器
- 基于 Vue 实现 Excel 的解析与导出
- 通过爬虫获取银行名称
- linux pppd ip up 脚本,Linux下pppd拨号脚本配置(转载)
- 什么是ddos攻击,怎么防御ddos攻击?