学习目标:
学习Vec类、Mat_类、Matx类的使用和含义
学习内容:
目录
一、Vec类
1、cv::Vec类是列向量,是固定模板类,格式为:
cv::Vec<Typename _Tp,int _cn> _Tp表示元素类型,_cn表示元素数目
2、Vec类型
- cv::Vec2b: Vec<uchar, 2> 数据类型为uchar,长度为2的固定模板类
- cv::Vec3d: Vec<double, 3> 数据类型为double,长度为3的固定模板类
- 全部类型为 cv::Vec {2, 3, 4, 6, 8} {b, d, f, i, s, w} ,
- 其中数字2, 3, 4, 6, 8表示列向量的长度,{b, d, f, i, s, w}表示向量中元素类型,b——uchar类型,d——double类型,f——float类型,i——int类型,s——short类型,w——ushort类型。数字可以和类型组合 构成不同类型的Vec向量。
3、 创建向量
cv:Vec2i v1(5, 6)
cv:Vec3f v2(1.0, 3.0, 5.0)
cv:Vec3f v3(v2) //v2赋值给v3
4. 访问向量元素
同数组访问一样,通过下标访问(下标从0开始)。
int first = v1[0]
二、Mat_模板矩阵类
- Mat_模板矩阵类:是Mat的衍生类。
- Mat_的创建同Mat类类似,可以参考上篇Mat类详解,下边是部分构造函数:
-
Mat_() //没有参数的构造函数 Mat_(int _rows, int_cols) //等同于Mat(int _rows, int_cols, DataType type),创建行数为rows,列数为cols的矩阵 Mat_(Size _size) //等同于Mat(Size _size, DataType type),创建Size为size的矩阵 Mat_ (const Mat_ &m)
创建举例:
Mat M(100,100,CV_8U);
Mat_<float>& M1 = (Mat_<float>&)M;
3. Mat_具体类型
cv:Mat1{b,d,f,i,s,w}
b—uchar类型,d—double类型,f—float类型,i—int类型,s—short类型,w—ushort类型。
- cv:Mat1b 是Mat_<uchar>类型
- cv:Mat1d 是Mat_<double>类型
- cv:Mat1f 是Mat_<float>类型
- cv:Mat1i 是Mat_<int>类型
- cv:Mat1s 是Mat_<short>类型
- cv:Mat1w 是Mat_<ushort>类型
cv:Mat2{b,d,f,i,s,w} 2表示Vec2(2维向量)
- cv:Mat2b 是Mat_<Vec2b>类型
- cv:Mat2d 是Mat_<Vec2d>类型
cv:Mat3{b,d,f,i,s,w} 3表示Vec3(3维向量)
- cv:Mat3b 是Mat_<Vec3b>类型
- cv:Mat3d 是Mat_<Vec2d>类型
cv:Mat4{b,d,f,i,s,w} 4表示Vec4(4维向量)
- cv:Mat4b 是Mat_<Vec4b>类型
- cv:Mat4d 是Mat_<Vec4d>类型
三、Matx模板类
- 它是在编译时已知type和size的小矩阵的模板类。
- Matx的构造方法
Matx() 默认无参构造器
Matx( _Tp v0) //1x1的矩阵
Matx( _Tp v0, _Tp v1) //1x2或者2x1的矩阵
构造函数的参数有1,2, 3, 4, 5, 6, 7, 8, 9,10, 12, 14,16个,具体可以参考opencv的官方文档(https://docs.opencv.org/4.x/de/de1/classcv_1_1Matx.html#a8d6414aaa86e104f325da7be04260a8b)
float values[] = { 1, 2, 3};
Matx31f A0(values);
Matx41f A1 = {1, 2, 3, 4};
Matx33i A1(1, 2, 3,
4, 5, 6,
7, 8, 9);
3. cv::Matx的各种类型
cv:Matx{1} {2, 3, 4, 6} {d, f} d—double类型,f—float类型
- cv:Mat12d 是Matx< double, 1, 2>类型
- cv:Matx16f 是Matx< float, 1, 6>类型
cv:Matx{2} {1, 2, 3} {d, f}
- cv:Matx21d 是Matx< double, 2, 1>类型
- cv:Matx22d 是Matx< double, 2, 2>类型
cv:Matx{3} {1, 2, 3, 4} {d, f}
- cv:Matx31d 是Matx< double, 2, 1>类型
- cv:Matx34d 是Matx< float, 3, 4>类型
cv:Matx{4} {1, 3, 4} {d, f}
- cv:Matx43d 是Matx< double, 4, 3>类型
cv:Matx{6} {1, 6} {d, f}
- cv:Matx66d 是Matx< double, 6, 6>类型