OpenCV学习笔记—数据类型
一、基础类型
1.1 Point类
Point类是两到三个原语类型的容器,成员通道名称变量访问(mypoint.x , mypoint.y),在使用时通过别名调用Point2i,Point2f。大多数程序中,Ponit是通过Point2f和Point3f来实例化的,支持的操作为
1.2 Scalar类
Scalar类一般是双精度四元素向量的别名,与vec<>相同,通过下标访问,Scalar继承自Vec<double,4>
1.3 Size类
Size类与Point类相似,可以与Point类互换,区别在于Point类的数据成员是xy,Size是weight和height。
1.4 Rect
Rect有Size类的成员weight、height,和Point类的成员x、y。Rect是一个整型数据类型的矩形的别名。
也可以计算两个矩阵
RotatedRect类是以左上角为原点的,而Rect以中心为原点
1.5 Matx<>
Matx<>为固定矩阵类,用于处理矩阵代数的矩阵,适合一些小型矩阵(22 、33),它在编译时维度已知
固定向量类继承自固定矩阵类,而其他类的重要操作,要么继承自固定向量类,要么是依赖于转换成固定向量类
1.6 Vec<>
模板类Vec<>即为固定向量类,用于在编译时已经知道维度的小型向量。固定向量模板是列为1的固定矩阵模板。在使用时定义了许多它的别名,例如,Vec2i(两个元素的整型向量),Vec3i,Vec4d等。成员通过下标访问(myvec[0])
1.7 复数类
复数类与STL的复数类模板不一样,但与之兼容,STL中数据是通过成员函数real() imag()获取的,而OpenCV中直接通过成员变量re、im获取
二、辅助对象
2.1 TermCriteria类
用于提供终止条件,以确定算法何时退出。
构造函数为:TermCriteria(int type,int maxcount,double epsilon)
type用于确定终止条件的类型为COUNT或EPS,COUNT表示达到允许的有限迭代次数,EPS表示某些形式的误差参数下降到一定程度。
2.2 Range类
用于确定一个连续的整数序列,构造函数:Range(iny start ,int end)
,序列包含初始值,不包含终止值
(0,4)就是0,1,2,3
2.3 智能指针和垃圾收集
智能指针允许我们创建一个对象的引用,把它传递到各处,可以创建多个该对象的引用,这些引用会计数,一旦所有的引用(指针)消失,这个对象将被自动清理。
定义一个指针模板的实例:cv::Ptr<Matx33f>p(new cv::Matx33f)
,这样就拥有了一个智能指针p,可以再创建一个智能指针s,把p值传给s,这两个指针都同时指向一个对象,当p被释放时,s就能够知道自己是仅存的引用,要是s也被释放,就要释放它的原始指针(最后离开教室的人关灯)。
智能指针的一个成员是delete_obj,是引用计数为0时自动调用的函数,可以用它清楚指向的类对象,例如
//使用旧版本的IplImage加载图像
IplImage *img=cvLoadImage(...);
//使用新版本的IplImage加载图像
//这样可以以指针相同的方式使用img,并且在img离开范围时,会自动借助delete_obj释放指针
cv::Ptr<IplImage> img=cvLoadImage("an_imag");
2.4 DataType<>模板
在传递特定数据类型时,可以创建一个DataType<>类的对象
2.5 InputArray和OutputArray类
这两个类型支持所有的数组类型,包括小的数组类型(Scalar,Vec,Matx)和大型数组类型(Mat),不同之处在于前者是常量,只读,后者是可变量。
三、工具函数
参考文献:学习OpenCV3 中文版