openCV学习(二)——Mat的衍生类

学习目标:

学习Vec类、Mat_类、Matx类的使用和含义


学习内容:

目录

一、Vec类

二、Mat_模板矩阵类

三、Matx模板类


一、Vec类

1、cv::Vec类是列向量,是固定模板类,格式为:

      cv::Vec  _Tp表示元素类型,_cn表示元素数目

2、Vec类型

  • cv::Vec2b: Vec  数据类型为uchar,长度为2的固定模板类
  • cv::Vec3d: Vec  数据类型为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_模板矩阵类

  1. Mat_模板矩阵类:是Mat的衍生类。
  2. 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_& M1 = (Mat_&)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_类型
  • cv:Mat1d  是Mat_类型
  • cv:Mat1f  是Mat_类型
  • cv:Mat1i  是Mat_类型
  • cv:Mat1s  是Mat_类型
  • cv:Mat1w  是Mat_类型  

     cv:Mat2{b,d,f,i,s,w}  2表示Vec2(2维向量)

  • cv:Mat2b  是Mat_类型
  • cv:Mat2d  是Mat_类型

     cv:Mat3{b,d,f,i,s,w}  3表示Vec3(3维向量)

  • cv:Mat3b  是Mat_类型
  • cv:Mat3d  是Mat_类型

      cv:Mat4{b,d,f,i,s,w}  4表示Vec4(4维向量)

  • cv:Mat4b  是Mat_类型
  • cv:Mat4d  是Mat_类型

三、Matx模板类

  1. 它是在编译时已知type和size的小矩阵的模板类。
  2. 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>类型

 

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