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

一. 基本数据类型

1.一些基本类型缩写:

b w s i f d
unsigned char unsigned short short int float double

2. Point类

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

cv::Point2i cv::Point2f cv::Point2d cv::Point3i cv::Point3f cv::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::Size cv::Size2i cv::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. 复数类

你可能感兴趣的:(#,OpenCV,opencv,基本数据类型,基础)