Vec的表示 ---- Vec2b,Vec3b,Vec2s,Vec3s
//【1】Vec2b---表示每个Vec2b对象中,存储2个char(字符型)数据
typedef Vec<uchar, 2> Vec2b; 、
//【2】Vec3b---表示每一个Vec3b对象中,存储3个char(字符型)数据,比如用这样的对象,去存储RGB图像中的一个像素点
typedef Vec<uchar, 3> Vec3b;
//【3】Vec4b---表示每一个Vec4b对象中,存储4个字符型数据,用这样的类对象去存储---4通道RGB+Alpha的图像中的像素点
typedef Vec<uchar, 4> Vec4b;
//【4】Vec2s---表示这个类的每一个类对象,存储2个short int(短整型)的数据
typedef Vec<short, 2> Vec2s;
typedef Vec<short, 3> Vec3s;
typedef Vec<short, 4> Vec4s;
Vec的表示---Vec3b
例如 8U 类型的 RGB 彩色图像可以使用 <Vec3b>
3 通道 float 类型的矩阵可以使用 <Vec3f>。
对于 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<uchar>(0,0) = 0;
②已知一幅图片img的数据类型为unsigned char的彩色图片,再次要求将坐标(0,0)的像素赋值为0。
Opencv中图像三原色在内存中的排列顺序为B-G-R
src.at<Vec3b>(0, 0) [0] = 0; //B
src.at<Vec3b>(0, 0) [1] = 0; //G
src.at<Vec3b>(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<Vec3f>(y, x); //read color values for pixel (y,x)
PS:Vec3f是一种数据类型,其是3通道的float,后面的mat.at<Vec3f>(y, x)是访问图像的一种方式。
mat.at<Vec3f>(y, x)[0];mat.at<Vec3f>(y, x)[1];mat.at<Vec3f>(y, x)[2];
对于mat的理解,可以认为mat.at<Vec3f>是mat的一种访问形式,其有点类似vector。