opencv学习记录07:Opencv中向量模板类Vec的表示---vec3b、vec3f

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 Vec3f
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 分量
下面的例子是做修改亮度和对比度
先取float值在做运算

Mat m1;
src.convertTo(m1, CV_32F);                 //
for (int row = 0; row < height; row++) {
	for (int col = 0; col < width; col++) {
		if (src.channels() == 3) {
			float b = m1.at<Vec3f>(row, col)[0];// blue
			float g = m1.at<Vec3f>(row, col)[1]; // green
			float r = m1.at<Vec3f>(row, col)[2]; // red

			// output
			dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b * alpha + beta);   
			dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g * alpha + beta);
			dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r * alpha + beta);

参考博客:
链接: https://blog.csdn.net/qq_40119386/article/details/88736212.

猜你喜欢

转载自blog.csdn.net/Cai_Xu_Kun/article/details/107654480