Opencv基本数据类型

Opencv基本数据类型主要包括:cv::Vec、cv::Point、cv::Size、cv::Scalar、cv::Rect、cv::Matx、cv::Range等。

1 Point类

cv::Point{2,3}{b,s,i,f,d},2、3代表维度,在这里b是一个无符号字符,s是一个短整型,i是一个32位整型,f是一个32位浮点数,d是一个64位浮点数。Point类的成员通过名称变量访问,如mypoint.x,mypoint.y等。

1.1 Point类支持的操作:

默认构造函数:cv::Point2i p;cv::Point3i p;

复制构造函数:cv::Point3f p2(p1);

值构造函数:cv::Point2i(x0,x1);cv::Point3d p(x0,x1,x2);

构造成固定向量类:(cv::Vec3f)p;

成员访问:p.x ,p.y;

点乘:float x = p1.dot(p2);

双精度点乘:double x =p1.ddot(p2);

叉乘:p1.cross(p2);

2 Scalar类

cv::Scalar本质上是一个四维Point类,与Point类相似,cv::Scalar实际上与一个可以产生任意四元素向量的模板相关,但cv::Scalar一般是双精度四元素向量的别名。

2.1 Scalar类支持的操作:

默认构造函数:cv::Scalar s;

复制构造函数:cv::Scalar s2(s1);

值构造函数:cv::Scalar s(x0);cv::Scalar s(x0,x1,x2,x3);

元素相乘:s1.mul(s2);

(四元数)共轭:s.conj();//return cv::Scalar(s0,-s1,-s2,-s2)

(四元数)真值测试:s.isReal();//return ture, if s1==s2==s3==0

3 Size类

size类在实际操作时与Point类相似,而且可以与Point类相互转换。这两者间主要区别在于Point类的数据成员是x和y,而size类中对应的成员是width和height。size类的三个别名分别是cv::Size,cv::Size2i,cv::Size2f。前面两个是等价的,表示整数大小,而最后一个是表示32位浮点大小。

3.1 Size类支持的操作:

默认构造函数:cv::Size sz;cv::Size2i sz;cv::Size2f sz;

复制构造函数:cv::Size sz2(sz1);

值构造函数:cv::Size2f sz(w,h);

成员访问:sz.width;sz.height;

计算面积:sz.area();

4 Rect类

Rect类包含Point类的成员x和y(矩形左上角)和Size类的成员width和height(代表了矩形的大小)。

4.1 Rect类支持的操作:

默认构造函数:cv::Rect r;

复制构造函数:cv::Rect r2(r1);

值构造函数:cv::Rect(x,y,w,h);

由起始点和大小构造:cv::Rect(p,sz);

由两个对角构造:cv::Rect(p1,p2);

成员访问:r.x,r.y,r.width,r.height;

计算面积:r.area();

提取左上角和右下角:r.tl(),r.br();

判断p点十分在矩形r内:r.contains(p);

4.2 Rect类的覆写操作:

矩形r1和矩形r2的交集:cv::Rect r3 = r1&r2;r1 &= r2;

同时包含矩形r1和矩形r2的最小面积矩形:cv::Rect r3 = r1|r2;r1 |=r2;

平移矩形r x个数量:cv::Rect rx = r+x;r +=x;

扩大矩形r s大小:cv::Rect rs = r+s;r+=s;

比较矩形r1和矩形r2是否相等和不相等:bool eq = (r1==r2);bool ne = (r1 != r2);

5 固定矩阵类cv::Matx

固定矩阵类是为了编译时就已知维度的矩阵所设计的,它的内部所有数据都是在堆栈上分配的。固定矩阵类是Opencv的c++接口基本类型的核心。固定向量类继承自固定矩阵类,而其他类的操作,要么继承自固定向量类,要么依赖于转换成固定向量类。固定矩阵类实际上一个模板。这个模板称为cv::Matx<>,但独立的矩阵通常通过别名分配。这些别名的基础格式为cv::Matx{1,2,3,4,5,6}{1,2,3,4,5,6}{f,d}。

5.1 Matx类支持的操作:

默认构造函数:cv::Matx33f m22f;cv::Matx43d m43d;

复制构造函数:cv::Matx22d m22d(n22d);

值构造函数:cv::Matx21f m(x0,x1);

含相同元素的矩阵:m33f = cv::Matx33f::all(x);

全零矩阵:m23d = cv::Matx23d::zeros();

元素全是1的矩阵:m16f = cv::Matx16f::ones();

单位矩阵:m33f = cv::Matx33f::eye();

均匀分布矩阵:m33f = cv::Matx33f::randu(min,max);

正态分布矩阵:m33f = cv::Matx33f::nrandu(mean,variance);

成员访问:m(i,j),m(i);

矩阵能正常的进行加减乘除;

点积:m1.dot(m2)  m1.ddot(m2);

变换操作符:m44f = (Matx44f) m44d;

提取(i,j)处的2*2子矩阵:m44f.get_minor<2,2>(i,j);

提取第i行或者j列:m14f = m44f.row(i),m41f = m44f.col(j);

提取矩阵的对角线:m41f = m44f.diag();

计算矩阵转置:n44f = m44f.t();

计算矩阵的逆:n44f = m44f.inv(method);

每个元素的乘法:m1.mul(m2);

6 固定向量类

固定向量类的形式为cv::Vec{2,3,4,6}{b,s,w,i,f,d} s是一个短整型,i是一个32位整型,f是一个32位浮点数,d是一个64位浮点数,w表示unsigned short。

6.1 cv::Vec支持的操作:

默认构造函数:cv::Vec2s v2s;

复制构造函数:cv::Vec3f u3f(v3f);

值构造函数:cv::Vec2f v2f(x0,x1);

成员访问:v4f[i];v3w(j) //[] 和()都是可以的

向量叉乘:v3f,cross(u3f);

7 Range类

cv::Range类用于确定一个连续的整数序列。cv::Range有两个元素start和end。构造函数cv::Range(int start,int end)范围包含初始值start,但不包括终止值end,因此cv::Range rng(0,4)包含0,1,2,3但是不包含4。rng.size()输出range类的元素数量,成员函数empty()测试一个range十分含有元素。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值