OpenCv中向量模板类Vec的表示

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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值