Opencv常见图像格式Data Type及代码实例
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 值来替代,其对应关系如下表:
取值范围
at所访问的数据类型
由于 at 方法接受的是 uchar 这样的数据类型,而非 cv_8u。 若是要使用 at 方法访问数据元素,在已知通道数和每个通道数据类型的情况下,指定给 at 方法的数据类型如下表所示:
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向量数目永远是等于通道数目
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。