OpenCV基础一: 基本数据类型及其基本函数(陆续更新)

一. 基本数据类型

1.一些基本类型缩写:

bwsifd
unsigned charunsigned shortshortintfloatdouble

2. Point类

Point类属于模板类, 简单开销小. Point类通过别名调用, 并使用 . 访问成员变量, 例如:

cv::Point2icv::Point2fcv::Point2dcv::Point3icv::Point3fcv::Point3d

操作函数如下:

操作示例
默认构造函数cv::Point2i p;
cv::Point3i p;
复制构造函数cv::Point3f p2(p1);
值构造函数cv::Point2i p(x0,x2);
cv::Point3d p(x0, x1, x2);
构造成固定向量类(cv::Vec3f) p;
成员函数p.x, p.y, //三维中:P.Z
点乘float x = p1.dot(p2);
双精度点乘double x = p1.dot(p2)
叉乘p1.cross(p2) //三维中使用
判断一个点p是否在矩形r内p.inside® //三维中使用

可以转化到固定向量类.

3. 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, 0s2);
(四元数)真值测试s.isReal(); //return true, if s1 == s2 == s3 == 0

4. size类

与Point类类似, 只要区别在于Point的数据成员是x和y(点), 而size类对应的数据成员是width和height.

size类拥有的三个别名分别为:

cv::Sizecv::Size2icv::Size2f

支持的操作为:

操作示例
默认构造函数cv::Size sz
cv::Size2i sz
cv::Size2f sz;
复制构造函数cv::SIze sz2(sz1)
值构造函数cv::Size2f sz(w, h)
成员访问sz.width;
sz.height
计算面积sz.area()

不支持转换到固定向量类.

5. cv::Rect类

矩形类包含Point类的成员x和y(矩形左上角)和size类的成员width和height(代表的矩形的大小和位置).

但矩阵并非继承自Point类或者size类, 所以不具有其相关操作.

支持的操作:

操作示例
默认构造函数cv::Rect r
复制构造函数cv::Rect r2(r1)
值构造函数cv::Rect(x, y, width, height)
由起始点和大小构造cv::Rect(p, sz)
由两个对角构造cv::Rect(p1, p2)
成员访问r.x; r.y; r.width; r.height
计算面积r.area()
提取左上角r.tl()
提取右下角r.br()
判断点p是否在矩形内r.contains§

覆写操作符:

操作示例
矩形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)
比较矩形r1与矩形r2是否不想等bool ne = (r1 != r2)

6. cv::RotatedRect类

包含一个中心点cv::Point2f, 一个大小cv::Size2f和一个角度float的容器.

其中float表示图形围绕中心点旋转的角度.

cv::RotatedRect和cv::Rect有一个非常重要的不同点是cv::RotatedRect是以中心为原点, 而cv::Rect则以左上角为原点. 支持的操作:

操作示例
默认构造函数cv::RotatedRect rr()
复制构造函数cv::RotatedRect rr2(rr1)
从两个点构造cv::RotatedRect(p1, p2)
值构造函数, 需要一个中心点point,
一个大小size和一个角度float
cv::Rotated rr(point, size, float)
成员访问rr.center, rr.size, rr.float
返回四个角的列表rr.points(ptr[4])

7. 固定矩阵类

固定矩阵类需要在创建时知道矩阵的纬度(大小). 其分配和清楚都很快. 在小型矩阵(2x2, 3x3, 等等)矩阵上做过特别的优化.

一般来说, 在编译的时候知道矩阵的大小的时候使用固定矩阵类(比如相机矩阵), 而如果对象是一个图像或大型点列表这样的大数组的时候, 通常使用cv::Mat.

cv::Matx支持的操作:

操作示例
默认构造函数cv::Matx33f m33f;
cv::Matx43d m43d;
复制构造函数cv::Matx22d m22d(n22d)
值构造函数cv::Matx21f m(x0, x1);
cv::Matx44d m(x0, x1, …, x14, x15);
含相同元素的矩阵m33f = cv::Matx33f::all( x )
全零矩阵m23d = cv::Matx23d::zeros();
全一矩阵m16f = cv::Matx16f::ones();
创建一个单位矩阵m33f = cv::Matx33f::eye();
成员访问m( i, j ), m( i )

8. 固定向量类

固定向量类从固定矩阵类派生出来, 可以说固定向量类是列为1的cv::Matx<>.

cv::Vec支持的操作:

操作示例
默认构造函数Vec2s v2s;
Vec6f v6f;
复制构造函数Vec3f u3f( v3f );
值构造函数Vec2f v2f(x0, x1);
Vec6d v6d(x0, x1, x2, x3, x4, x5);
成员访问v4f[ i ];
v3w( j ); //operator()和operator[]都可以
向量叉乘v3f.cross( u3f )

9. 复数类

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值