欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Opencv常见图像格式Data Type及代码实例

程序员文章站 2022-04-26 14:57:17
cv::mat 图像格式 (data type)命名规则通用的参数命名格式为:cv_{元素比特数}{元素类型}c{通道数}1最常见的 cv_8uc3 就表示为 3通道unsigned 8bits 格式...

cv::mat 图像格式 (data type)命名规则

通用的参数命名格式为:

cv_{元素比特数}{元素类型}c{通道数}

1最常见的 cv_8uc3 就表示为 3通道unsigned 8bits 格式的矩阵

  • 8u:8bit unsigned
  • c3:通道数为 3

2有些图片存储格式是 32位float ,则对应的图像格式为:cv_32fc1,cv_32fc2,cv_32fc3 等;

3如果图片存储格式是 64位double ,则对应的图像格式为:cv_64fc1,cv_64fc2,cv_64fc3 等。

int值映射关系

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

Opencv常见图像格式Data Type及代码实例

取值范围

Opencv常见图像格式Data Type及代码实例

at所访问的数据类型

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

Opencv常见图像格式Data Type及代码实例

vec2b:表示每个vec2b对象中,可以存储2个char(字符型)数据

vec3b:表示每一个vec3b对象中,可以存储3个char(字符型)数据,比如可以用这样的对象,去存储rgb图像

vec4b:表示每一个vec4b对象中,可以存储4个字符型数据,可以用这样的类对象去存储—4通道rgb+alpha的图

对应的 vec类 的定义如下:

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

使用无参数构造函数,创建mat对象

mat image = mat();
image.create(4, 4, cv_8uc3); 

或者

mat m = mat(4, 4, cv_8uc3)  

此刻表示创建一个4x4大小的像素块,每个像素都是三通道每个通道的位数都是8位,一个字节的。上述cv_8uc3中的8表示8位、uc表示uchar类型、3表示三个通道。

样例2

使用行、列、类型、scalar向量四个参数的构造函数创建mat对象

mat m = mat(4, 4, cv_8uc3, scalar(0, 255, 255);

或者

mat m = mat(size(4, 4), cv_8uc3, scalar(255, 0, 0)); 

同样表示创建一个4x4的像素块,唯一不一样的是颜色不是默认值而是我们指定的三通道颜色值向量scalar(0, 255, 255)。其中scalar向量数目永远是等于通道数目

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。