【OpenCV学习笔记1】向量类Vec

前言

初入OpenCV的世界,前辈们让我跟着《OpenCV3 编程入门》和学习视频学习即可,但很多东西对我这种非计算机科班小白而言,C++和OpenCV一结合起来对我不是很友好,故于此记录学习笔记便于自己学习查阅,也希望有做视觉大神可以多多指点。


一、向量类Vec

vector(向量): C++中的一种数据结构,确切的说是一个类,其相当于一个动态的数组,类似的数组替代品还有Array类。

1.定义

此向量可以理解为数学意义上的列向量,构造一个_cn×1的列向量,数据类型为 _Tp,格式如下:
Vec //默认是列向量
如构造一个长度为3,数据类型为int且初始化为1、3、4的列向量。
Vec vi (1,3,4);

2.访问方式

可以通过“[]”或者“()”操作符访问向量中的值:
vi[0] //访问第1个元素
vi[1] //访问第2个元素

3.Vec向量类的别名定义

typedef Vec Vec3b;
typedef Vec Vec2i;
typedef Vec Vec4f;
typedef Vec Vec3d;

解释typedef Vec Vec3b; 只要理解 Vec即可,这句就是定义一个uchar类型的数组,长度为3。
例如 8U 类型的 RGB 彩色图像可以使用 Vec3b,3 通道 float 类型的矩阵可以使用 Vec3f。
例1:
对于 Vec 对象,可以使用[]符号如操作数组般读写其元素,如:
Vec3b color; //用 color 变量描述一种 RGB 颜色
color[0]=255; //B 分量
color[1]=0; //G 分量
color[2]=0; //R 分量

例2:

Vec3f point = Vec3f(10,10,3.2);//Float, 3 components

Mat mat(3,3,CV_32FC3,);//3 channel matrix

Vec3f v3f = mat.at<Vec3f>(y, x);//read color values for pixel (y,x)

注释:注释一下:Vec3f是一种数据类型,其是3通道的float,后面的mat.at(y, x)是访问图像的一种方式,详细见C++的成员函数at()和像素操作。

4.使用说明:

1.头文件:vector.hpp
在程序开头处加上#include
2.变量声明:
2.1 例:声明一个int向量以替代一维的数组:vector a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。
2.2 例:用vector代替二维数组。只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即:vector a。同理,用向量代替三维数组也是一样vector a;再往上面依此类推。


二、Reference

1.https://blog.csdn.net/liubin8095/article/details/100421945
2.https://blog.csdn.net/qq_29540745/article/details/52517269
3.https://blog.csdn.net/xfortius/article/details/7761622

你可能感兴趣的:(opencv,opencv)