1.基本数据类型是cv::Vec<>(里面的元素数量最多不能超过9),为什么不直接使用stl::Vec<>呢,这是因为cv::Vec<>是专门用于维度已知的小vector的。这个cv::Vec<>有许多别名,例如cv::Vec2i(2元素的整数向量),cv::Vec3i,cv::Vec4d,通式是这样的:
cv::Vec{2,3,4,6}{b,w,s,i,f,d}
其中,b = unsigned,char, w = unsigned short, s = short, i = int, f = float, d = double.
2.同样的还有cv::Matx,如下式,使用这种能确定数量的mat和vec可以更加效率,消除了动态内存分配。
cv::Matx{1,2,3,4,6}{1,2,3,4,6}{f,d}
3.还有一种类cv::point 与cv::Vec不同的是,cv::point的存取是用变量的名字来存储的,而不是vec中的索引,例如:(mypoint.x, mypoint.y, etc.) rather than by a vector index (myvec[0],myvec[1], etc.),同样的也有不同类型:
cv::Point2i, cv::Point2f, and cv::Point2d, or cv::Point3i, cv::Point3f, and cv::Point3d.
还有一种cv::Scalar,是一个4变量的,double-precision的vector,与cv::Vec
4.cv::Size(它的别名是cv::Size2i)里面的成员是width,height,并且都是整数,而不像cv::point一样里面是x,y。而cv::Rect(里面都是整数,和前面的cv::Size一样)同时包含4个,也就是width,height,x,y.还有一种数据结构叫cv::RotatedRect.里面有一个center(cv::Point2f),一个size(cv::Size2f),和一个angle(float).
以上这些类保存在/opencv2/core/core.hpp里面。
point类是最简单的一个类,这个类只有两个模板,一种为two-dimensional另一种是three-dimensional的,并且在必要的时候可以转换为其他的类型,例如fixed vector classes以及the fixed matrix classes。cv::point中的操作如下:这些操作是隐式的把ponit转换为fixed vector得到的。
cv::Scalar is really a four-dimensional point class。里面都是double-precision floating-point numbers。它的操作都是继承the fixed vector classes的,也就是the fixed vector classes有的它都有,所以里面不像上一个表那样,有一个强制转换操作。
里面有三种类型:cv::Size,cv::Size2i,cv::Size2f,其中cv::Size=cv::Size2i.并且cv::Size不能转换为fixed vector,所以非常有局限性。但是fixed vector和point类可以转换为size类。
这个类包含x,y(矩形的左上角坐标)以及width,heigh(矩形的长宽),cv::Rect 是rectangle模板
这个类就是在编译阶段, dimensions已知的matrix,所以叫fixed.调用的时候这么调用:cv::Matx{1,2,...}{1,2,...}{f,d},最大支持数字6.假如是图片这种比较大的矩阵,要用cv::Mat。这种fixed matrix适合用来作矩阵代数。
还有很多操作(参考书),因为这个类是最基本的。
例如要创建3x3的identity matrix,只要这样cv::Mat33f::eye(),不用在eye()里面规定参数,因为前面已经定义了是3x3的了。
这是一种特殊的cv::Matx<>,可以说cv::Vec<>是一种只有一列的cv::Matx.使用模板可以如下:
cv::Vec{2,3,4,6}{b,s,w,i,f,d}
所有的fixed matrix class 的方法都适用与vector,因为vector只是matrix的特例,上面只是列举了额外的方法。
这个类和stl的类差不多,唯一区别就是 member access.在STL中,使用real(),imag()分别取出实数,虚数部分,而这个类是用如下操作:
终止条件:一般使得一个程序终于需要有两个条件
现在直接有一个类,用于传进opencv算法中来终于算法,cv::TermCriteria
TermCriteria( int type, int maxCount, double epsilon ),其中的参数
这个类用于创建一个连续的整数序列,可以这么构造cv::Range( int start, int end ),例如cv::Range rng(0,4 )会包括0,1,2,3,但是没有4.这时候 对rng使用rng.size(),值应该是4.
这个cv::Ptr就是创建一个指针,方便在函数中引用,因为指针的效率高(不需要传值)。可以如下这么做:
cv::Ptr
然后就可以像指针那样使用了,例如:operator*() and operator->()。
假如现在已经有一个指针p,然后又创建了Ptr