opencv基本类型

1.cv::Matx<>固定矩阵类

cv::Matx<>在编译前必须知道其维度,维度有{1,2,3,4,6},其用途并不是用于大型数组的,只适用于一些3*3,4*4之类的小型数组,

其别名为cv::Matx{1,2,3,4,6}{1,2,3,4,6}{f,d},如cv::Matx33f,cv::Matx22d等。

操作 示例
默认构造函数

cv::Matx33f m33f;

cv::Matx43d m43d;

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

cv::Matx21f m(x0, x1);

cv::Matx44d m(x0,x1,x2...x15)(共16项)

含相同元素的矩阵

m33f = cv::Matx33f::all(x);

全零矩阵

m23d = cv::Matx23d::zeros();

全一矩阵 m16f = cv::Matx16f::ones();
创建一个单位矩阵 m33f = cv::Matx33f::eye();

创建一个可以容纳另一

个矩阵对角线的矩阵

m31f = cv::Matx33f::diag();
创建一个均匀分布的矩阵 m33f = cv::Matx33f::randu(min, max);
创建一个正态分布的矩阵 m33f = cv::Matx33f::nrandn(mean, variance);
成员访问

m(i,j);

m(i);//只能在一维矩阵中使用

矩阵代数运算

m1 = m0;

m0 * m1;

m0 + m1;

m0 - m1;

单例代数

m * a;

a * m;

m / a;

比较

m1 == m2;

m1 != m2;

点积 m1.dot(m2);
点积 m2.ddot(m2);//双精度类型的
改变矩阵形状 m91f = m33f.reshape<9.1>();
交换操作符 m44f = (Matx44f) m44d
提取(i,j)处的2*2子矩阵 m44f.get_mirror<2,2>(i,j);
提取第i行

m14f = m44f.row(i);

提取第i列 m41f = m44f.col(j);
提取矩阵对角线 m41f = m44f.diag();
计算转置 n44f = m44f.t();
逆矩阵

n44f = m44f.inv(method)

//默认的method是cv::DECOMP_LU,下同

解线性系统

m31f = m33f.solve(rhs31f, method);

m32f = m33f.solve<2>(rhs32f, method);

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

2.cv::Vec<>固定向量类

cv::Veb<>类继承于cv:Matx<>,其别名为cv::Vec{2,3,4,6}{b,w,s,i,f,d},如cv::Vec2i,cv::Vec3b等

其中b = unsigned char,w = unsigned short, s = short,i = int,f = float,d = double。

以上两种类的访问方式通过下标访问,[]和()都可以。

操作 示例
默认构造函数

cv::Vec2s v2s;

cv::Vec6f v6f;

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

cv::Vec2f v2f(x0,x1);

cv::Vec6d v6d(x0,x1,x2,x3,x4,x5);

成员访问

v4f[i];

v3w[j];

向量叉乘 v3f.cross(u3f);//只有三维点可以

3.cv::Point类

Point并不是继承固定向量类,而不是由自己的模板派生的,但可以从固定向量类转换得到。其访问方式也放生改变

如mypoint.x,mypoint.y等(mypoint是Point类的一个对象)。cv::Point类也有别名,如cv::Point2i,cv::Point2f,cv::Point2d,cv::Point3i等。

操作 示例
默认构造函数

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.dot(p2);
叉乘

p1.cross(p2);//只有三维点可以

判断一个点p是否在举行r内 p.inside(r);//只有二维点可以

这些类型可以与C接口类型CvPoint和CvPoint2D32f互相转换。

4.cv::Scalar类

其本质是一个四维Point类,一般是双精度四元素向量的别名,访问方式与Vec相同。直接继承于cv::Vec

操作 示例
默认构造函数 cv::Scalar s;
复制构造函数 cv::Scalar s2(s1);
值构造函数

cv::Scalar s(x0);

cv::Scalar s(x0,x1,x2,x3);

元素相乘 s1.mul(s2);
四元数共轭 s.conj();
四元数真值测试 s.isReal();

cv::Scalar类可以与旧式C语言接口CvScalar自由地互换。

5.cv::Size类

Size类与Point类相似,但Size的属性是width和height,而不是x,y。其实Size类是Size2i的别名,如果宽度和高度是浮点数,则用cv::Size2f。Size类可以与Point类互换。

操作 示例
默认构造函数

cv::Size sz;

cv::Size2i sz;

cv::Size2f sz;

复制构造函数 cv::Size sz2(sz1);
值构造函数 cv::Size2f sz(w, h);
成员访问

sz.width;

sz.height;

计算面积 sz.area();

6.cv::Rect类

cv::Rect拥有width,height,x,y四个属性。如果是非轴对称的矩形,可以使用cv::RotateRect类,它拥有一个cv::Point2f类型的中心点,一个cv::Size2f类型的size,还有一个额外的浮点类型的角度。

cv::Rect类并不是从Point,Size类继承过来的,所有并没有继承操作。

Rect类操作:

操作 示例
默认构造函数

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内 r.contains(p);

cv::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)
比较r1和r2是否不相等 bool ne = (r1 != r2)

cv::RotatedRect类

操作 示例
默认构造函数 cv::RotateRect rr();
复制构造函数 cv::RotateRect rr2(rr1);
从两个点构造 cv::RotateRect(p1, p1);
值构造函数 cv::RotateRect rr(p, sz, theta);
成员访问

rr.center;

rr.size;

rr.angle;

返回四个角的列表 rr.points(pts[4]);

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(opencv)