自建网站访问报错,网站建设存在问题整改报告,青岛网站建设公司报价,wordpress视频居中OpenCV有很多数据类型#xff0c;从组织结构的角度来看#xff0c;OpenCV的基础类型类型主要分为三类。第一类是直接从C原语中继承的基础数据类型#xff1b;第二类是辅助对象#xff1b;第三类是大型数据类型。本文主要介绍OpenCV的基础数据类型。
目录
Point类
Scalar…OpenCV有很多数据类型从组织结构的角度来看OpenCV的基础类型类型主要分为三类。第一类是直接从C原语中继承的基础数据类型第二类是辅助对象第三类是大型数据类型。本文主要介绍OpenCV的基础数据类型。
目录
Point类
Scalar类
Size类
Rect类
RotatedRect类
固定矩阵类
固定向量类
复数类 Point类
cv::Point类是两到三个原语类型的容器其成员是通过变量名称x、y、z访问的而不是通过下标访问。Point类是通过自己的模板派生来的这是一个基础模板实际上由两个这样的模板分别是给二维、三维的点提供的。这些类的实例有cv::Point2i、cv::Point2f、cv::Point2d或cv::Point3i、cv::Point3f、cv::Point3d在这里最后一个字母表示构造该点所需要的原语i是一个32位整形f是一个32位浮点数d是一个64位浮点数还可以有无符号字符b和短整型s。
优势简单且开销小。Point类可以转换成固定向量类或固定矩阵类同样也可由它们转换得到Point类。
Point类直接支持的操作操作示例默认构造函数 cv::Point2i p2; cv::Point3i p3; 复制构造函数 cv::Point3i p1( p ); 注若p为浮点型则会自动取整 值构造函数 cv::Point2i( x0, x1 ); cv::Point3d( x0, x1, x2 ); 构造成固定向量类(cv::Vec3f) p;成员访问p.x, p.y, p.z点乘float x p1.dot( p );双精度点乘double x p1.dot( p );叉乘 p1.cross( p ); 注只用于三维的点 判断一个点p是否在矩形r内p1.inside( r ); 注只用于二维的点
Scalar类
cv::Scalar是四维点类是四维双精度向量的快速表示。cv::Scalar直接从固定向量类模板实例cv::Vecdouble, 4中继承而来所以继承了所有向量代数操作、成员访问函数比如[]操作符和一些固定向量类的特性如其元素是通过整数下标来访问的。
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( x0, -x1, -x2, -x3 ); 四元数真值测试 s.isReal(); // if x1 x2 x3 0{ return true; }
Size类
Size类在实际操作时和Point类相似可以进行互相转换。主要区别在于Size类中对应的成员是width和height而不是x和y并且不支持转换到固定向量类。Size类的别名有cv::Size、cv::Size2i和cv::Size2f其中前两个都表示整型最后一个表示单精度浮点型。
Size类直接支持的操作操作示例默认构造函数 cv::Size sz; cv::Size2i sz; cv::Size2f sz; 复制构造函数cv::Size2f sz2( sz1 );值构造函数cv::Size2f sz( w, h );成员访问 sz.width; sz.height; 计算面积sz.area();
Rect类
Rect类又称矩形类包含Point类的成员x和y代表矩形左上角的坐标和Size类的成员width和height代表矩形的大小但并非从它们继承过来。
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(); // top-left提取右下角r.br(); // bottom-left判断点p是否在矩形r内r.contains( p );
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; // x为一个Point实例左上角偏移量 扩大矩形r s大小cv::Rect rs r s; r s; // s为一个Size实例尺寸改变量 比较矩形r1和矩形r2是否相等bool eq ( r1 r2 );比较矩形r1和矩形r2是否不相等bool ne ( r1 ! r2 );
RotatedRect类
cv::RotatedRect类是OpenCV中少数底层没有使用模板的C接口之一。它是一个包含一个中心点cv::Point2f、一个大小cv::Size2f和一个额外的角度float的容器表示图形绕中心点的旋转角度。
RotatedRect类直接支持的操作操作示例默认构造函数cv::RotatedRect rr();复制构造函数cv::RotatedRect rr2( rr1 ); 值构造函数需要一个点point、 一个大小size和一个角度angle cv::RotatedRect rr( p, sz, theta );成员访问rr.center; rr.size; rr.angle;返回四个角的列表rr.points( pts[4] );包含旋转矩形的最小矩形rr.boundingRect();
固定矩阵类
固定矩阵类cv::Matx的维度在编译之前必须知道因此被称为“固定”。它们内部的所有数据都是在堆栈上分配的所以分配和消除的很快消除了许多动态内存分配操作运行效率高。cv::Matx一般都以别名cv::Matx{1,2,3,4,5,6}{1,2,3,4,5,6}{f,d}的形式应用适用于小型矩阵并做了特别的优化。
cv::Matx类支持的操作操作示例默认构造函数 cv::Matx33f m33f; cv::Matx43d m43d; 复制构造函数cv::Matx22d m22d( n22d );值构造函数 cv::Matx21f m( x0, x1); cv::Matx44d m( x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 ); 函相同元素的矩阵m33f cv::Matx33f::all( x );全0矩阵m23d cv::Matx23d::zeros();全1矩阵m16f cv::Matx16f::ones();创建一个单位矩阵m33f cv::Matx33f::eye();创建一个可以容纳另一个矩阵对角线的矩阵m31f cv::Matx31f::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;单例singleton代数m * a; a * m; m / a;比较m1 m2; m1 ! m2;点积m1.dot( m2 ); // 使用默认精度运算法求点积点积m1.ddot( m2 ); // 使用双精度运算法求点积改变矩阵形状m91f m33f.reshape9, 1();变换操作符m44f (Mat44f) m44d;提取i j处的2×2子矩阵m44f.get_minor2, 2( i, j );提取第 i 行m14f m44f.row( i );提取第 j 列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.solve2( rhs32f, method); 每个元素的乘法m1.mul( m2 );method矩阵分解类型名称描述DECOMP_LU Gaussian elimination with the optimal pivot element chosen. 选择了最优主元的高斯消去法。一定不能是单数的。 DECOMP_SVD singular value decomposition (SVD) method; the system can be over-defined and/or the matrix src1 can be singular 奇异值分解SVD方法系统可以被过度定义和/或者矩阵src1可以是单数。 DECOMP_EIG eigenvalue decomposition; the matrix src1 must be symmetrical 特征值分解矩阵src1必须是对称的。 DECOMP_CHOLESKY Cholesky factorization; the matrix src1 must be symmetrical and positively defined 柯列斯基分解矩阵src1必须是对称的并是正定矩阵。该类型在处理大的矩阵时的速度是LU的两倍左右。 DECOMP_QR QR factorization; the system can be over-defined and/or the matrix src1 can be singular QR分解系统可以被过度定义和/或者矩阵src1可以是单数。 DECOMP_NORMAL while all the previous flags are mutually exclusive, this flag can be used together with any of the previous; it means that the normal equations are solved instead of the original system 虽然前面所有的标志都是互斥的但是这个标志可以和前面的任何一个一起使用这意味着解的是正规方程而不是原来的方程。
固定向量类
固定向量类cv::Vec是从固定矩阵类派生出来的从C继承的意义上可以说固定向量模板cv::Vec是列为1的cv::Matx。其特例的形式为cv::Vec{2,3,4,6}{b,s,w,i,f,d}w是无符号短整型主要遍历方式是通过单个数索引各项。
cv::Vec类支持的操作操作示例默认构造函数 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 );
复数类
cv::Complexf和cv::Complexd分别是单精度和双精度复数的别名。
复数类支持的操作操作示例默认构造函数 cv::Complexf z1; cv::Complexd z2; 复制构造函数cv::Complexf z2( z1);值构造函数 cv::Complexf z1( re0); cv::Complexf z2( re0, im1); 成员访问z1.re; z1.im1;复共轭z2 z1.conj();