【6】OpenCV中vec类的介绍

【1】Vec3f的介绍

Vec3f表示的是3通道float类型的 Vect,就相当于3通道float类型的图像(这是其中一个具体化),解释可以从源代码中看出来。
下面给出一个具体的例子:
Vec3f point = Vec3f(10,10,3.2);//Float, 3 components  一个向量由三个float组成
Mat mat(3,3,CV_32FC3,);//3 channel matrix 三通道
Vec3f v3f = mat.at(y, x);//read color values for pixel (y,x)
这里注释一下:Vec3f是一种数据类型,其是3通道的float,后面的mat.at(y, x)是访问图像的一种方式。(可以从定义形式上看出来 int a=....)
原文:https://blog.csdn.net/xfortius/article/details/7761622 

【2】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 彩色图像可以使用

原文:https://blog.csdn.net/qq_40119386/article/details/88736212 

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。
 

【3】Vec原模型和定义模型

【3.1】Vec vi

//vec构造的向量为列向量----》》》》》多行一列

	Vec vi(1,2,3);//构造并且初始化3x1 3行一列
	cout << "vi向量的行数" << vi.rows << endl;
	cout << "vi向量的列数" << vi.cols << endl;

	Vec vi1(1, 2, 3, 4);//构造4x1	4行一列
	cout << "vi1向量的行数" << vi1.rows << endl;
	cout << "vi1向量的列数" << vi1.cols << endl;
	cout << "访问vi1向量的第0个元素" << vi1[0] << endl;
	cout << "访问vi1向量的第1个元素" << vi1[1] << endl;
	cout << "访问vi1向量的第2个元素" << vi1[2] << endl;
	cout << "访问vi1向量的第3个元素" << vi1[3] << endl;

	Vec vi2(1,2);//构造2x1  2行一列
	cout << "vi2向量的行数" << vi2.rows << endl;
	cout << "vi2向量的列数" << vi2.cols << endl;
	cout << "访问vi2向量的第0个元素" << vi2[0] << endl;
	cout << "访问vi2向量的第1个元素" << vi2[1] << endl;

	   
	Vec3f point1 = Vec3f(10, 10, 3.2);//构造了一个3通道的浮点型向量
	cout << point1 << endl;

	Vec4f point2 = Vec4f(10, 10, 3.2,5);//构造了一个4通道的浮点型向量
	cout << point2 << endl;

	Vec3d point3 = Vec3d(10, 10, 3.2);//构造了一个3通道的双精度型向量
	cout << point3 << endl;

【3.2】Mat  MM = (Mat_(3, 3)); 

//构建一个3x3的矩阵 矩阵中每一个元素为三通道浮点型的点 边创建边赋值
	Mat iamge = (Mat_(2,2)<< Vec3f(1,2,3), Vec3f(1, 2, 3), Vec3f(1, 2, 3), Vec3f(1, 2, 3));//创造并且赋值
	for (size_t i = 0; i < iamge.rows; i++)
	{
		for (size_t j = 0; j (i, j) <(3, 3));//2x2三通道矩阵如何赋值?????? 先创建后赋值
	for (int i = 0; i < MM.rows; i++)
	{
		for (int j = 0; j < MM.cols; j++)
		{
			for (int c = 0; c < MM.channels(); c++)
			{
				//给M的每一个元素赋值                
				MM.at(i, j)[c] = c * 10;
			}
		}
	}
	cout << MM << endl;//输出矩阵

//创建多维矩阵  自定义数据类型	
	typedef  Vec Vec5d;
	//生成一个2x3x5的Mat,数据为double型
	Mat M =  Mat::zeros(2, 3, CV_64FC(5));
	cout << "channel = " << M.channels() << endl;//输出为5
	for (int i = 0; i < M.rows; i++)
	{
		for (int j = 0; j < M.cols; j++)
		{
			for (int c = 0; c < M.channels(); c++)
			{
				//给M的每一个元素赋值                
				M.at(i, j)[c] = c * 0.01;
			}
		}
	}
	cout << M << endl;//输出矩阵

  【3.3】Mat image = Mat(500, 500, CV_8UC3);

	Mat image3 = Mat(500, 500,CV_8UC3);//构造了一张灰度图像    
	imshow("image3", image3);

	Mat image1 = Mat(500, 500, CV_8UC3, Scalar(0, 0, 255));//构造了一张红色图像  CV_8UC3
	imshow("image1", image1);


 

你可能感兴趣的:(基于c++的图像处理)