OpenCv中向量模板类Vec的表示

Vec的表示 ---- Vec2b,Vec3b,Vec2s,Vec3s
//【1】Vec2b---表示每个Vec2b对象中,存储2个char(字符型)数据
typedef Vec Vec2b; 、
 //【2】Vec3b---表示每一个Vec3b对象中,存储3个char(字符型)数据,比如用这样的对象,去存储RGB图像中的一个像素点
typedef Vec Vec3b;
//【3】Vec4b---表示每一个Vec4b对象中,存储4个字符型数据,用这样的类对象去存储---4通道RGB+Alpha的图像中的像素点
typedef Vec Vec4b;
 //【4】Vec2s---表示这个类的每一个类对象,存储2个short int(短整型)的数据
typedef Vec Vec2s;
typedef Vec Vec3s;
 typedef Vec Vec4s;

Vec的表示---Vec3b

例如 8U 类型的 RGB 彩色图像可以使用

3 通道 float 类型的矩阵可以使用

对于 Vec 对象,可以使用 [ ] 符号如操作数组般读写其元素,

Vec3b color;  //用 color 变量描述一种 RGB 颜色
color[0] = 255;  //0通道的B 分量
color[1] = 0;  //1通道的G 分量
color[2] = 0;  //2通道的R 分量 
 

两种表示的用处:

①、已知一幅图像img的数据类型为 unsigned char型灰度图(单通道),要对坐标为(0,0)的像素重新赋值为0

src.at(0,0) = 0;

②已知一幅图片img的数据类型为unsigned char的彩色图片,再次要求将坐标(0,0)的像素赋值为0。

Opencv中图像三原色在内存中的排列顺序为B-G-R


src.at(0, 0) [0] = 0;  //B  
src.at(0, 0) [1] = 0;  //G  
src.at(0, 0)[2] = 0;  //R 

 

Vec的表示---Vec3f

Vec3f表示的是3通道float类型的 Vect,就相当于3通道float类型的图像(这是其中一个具体化),解释可以从源代码中看出来。

Vec3f point = Vec3f(10, 10, 3.2); //Float, 3 components
cv::Mat mat(3, 3, CV_32FC3); //3 channel matrix
Vec3f v3f = mat.at(y, x); //read color values for pixel (y,x)

PS:Vec3f是一种数据类型,其是3通道的float,后面的mat.at(y, x)是访问图像的一种方式。

mat.at(y, x)[0];mat.at(y, x)[1];mat.at(y, x)[2];

对于mat的理解,可以认为mat.at是mat的一种访问形式,其有点类似vector。

 

你可能感兴趣的:(OPENCV)