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

学习目标:

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


学习内容:

目录

一、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_模板矩阵类

  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_<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模板类

  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>类型

 

  • 16
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值