前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【opencv】cv::Mat 图像格式 (Data Type)

【opencv】cv::Mat 图像格式 (Data Type)

作者头像
JNingWei
发布2020-03-12 19:14:58
7.2K0
发布2020-03-12 19:14:58
举报
文章被收录于专栏:JNing的专栏

OpenCV使用Mat存图像,有专门的图像格式。

命名规则

通用的参数命名格式为:

CV_{元素比特数}{元素类型}C{通道数}

例如,最常见的 CV_8UC3 中:

  • 8U:8bit unsigned ;
  • C3:通道数为 3 。

因此,

  • CV_8UC3 就表示为 3通道Unsigned 8bits 格式的矩阵,也就是我们常说的 BGR3通道 。 类似的还有:CV_8UC1,CV_8UC2,CV_8UC3 等。
  • 有些图片存储格式是 32位float ,则对应的图像格式为:CV_32FC1,CV_32FC2,CV_32FC3 等;
  • 如果图片存储格式是 64位double ,则对应的图像格式为:CV_64FC1,CV_64FC2,CV_64FC3 等。

int值映射关系

矩阵元素的数据类型也可用不同的 int 值来替代,其对应关系如下表:

通道数

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之所以被跳过了,是因为该数字专门留给用户自定义:

代码语言:javascript
复制
#define CV_USRTYPE1 7

取值范围

数值

具体类型

取值范围

CV_8U

8 位无符号整数

0 ~ 255

CV_8S

8 位符号整数

-128 ~ 127

CV_16U

16 位无符号整数

0 ~ 65535

CV_16S

16 位符号整数

-32768 ~ 32767

CV_32S

32 位符号整数

-2147483648 ~ 2147483647

CV_32F

32 位浮点数

-FLT_MAX ~ FLT_MAX,INF,NAN

CV_64F

64 位浮点数

-DBL_MAX ~ DBL_MAX,INF,NAN

at所访问的数据类型

由于 at 方法接受的是 uchar 这样的数据类型,而非 CV_8U。 若是要使用 at 方法访问数据元素,在已知通道数和每个通道数据类型的情况下,指定给 at 方法的数据类型如下表所示:

C1

C2

C3

C4

C6

uchar

uchar

cv::Vec2b

cv::Vec3b

cv::Vec4b

short

short

cv::Vec2s

cv::Vec3s

cv::Vec4s

int

int

cv::Vec2i

cv::Vec3i

cv::Vec4i

float

float

cv::Vec2f

cv::Vec3f

cv::Vec4f

cv::Vec6f

double

double

cv::Vec2d

cv::Vec3d

cv::Vec4d

cv::Vec6d

其中,

  • Vec2b:表示每个Vec2b对象中,可以存储2个char(字符型)数据
  • Vec3b:表示每一个Vec3b对象中,可以存储3个char(字符型)数据,比如可以用这样的对象,去存储RGB图像中的
  • Vec4b:表示每一个Vec4b对象中,可以存储4个字符型数据,可以用这样的类对象去存储—4通道RGB+Alpha的图

对应的 Vec类 的定义如下:

代码语言:javascript
复制
template<typename _Tp, int n> class Vec : public Matx<_Tp, n, 1> {...};

typedef Vec<uchar, 2> Vec2b;
typedef Vec<uchar, 3> Vec3b;
typedef Vec<uchar, 4> Vec4b;

typedef Vec<short, 2> Vec2s;
typedef Vec<short, 3> Vec3s;
typedef Vec<short, 4> Vec4s;

typedef Vec<int, 2> Vec2i;
typedef Vec<int, 3> Vec3i;
typedef Vec<int, 4> Vec4i;

typedef Vec<float, 2> Vec2f;
typedef Vec<float, 3> Vec3f;
typedef Vec<float, 4> Vec4f;
typedef Vec<float, 6> Vec6f;

typedef Vec<double, 2> Vec2d;
typedef Vec<double, 3> Vec3d;

typedef Vec<double, 4> Vec4d;
typedef Vec<double, 6> Vec6d;

参考文献

[1] Interface [2] LIST OF MAT TYPE IN OPENCV [3] CV_8UC1,CV_8UC2,CV_8UC3 Vec2b Vec3b Vec4b 含义 [4] 确定 OpenCV 矩阵元素的数据类型

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 命名规则
  • int值映射关系
  • 取值范围
  • at所访问的数据类型
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档