OpenCV 3-2.1-基本数据类型概览

最基本的数据类型是模板类cv::Vec<>,这是一个原生容器类,我们将其称为 fixed vector 类。为什么不直接使用STL类呢?主要区别在于,fixed vector 类适用于其尺寸在编译时已知的小向量。这使得操作小变量的时候更加高效。后面我们将介绍cv::Mat类,它是处理任意维数的大型数组的类型,但是现在,可以认为固定的向量类对于小的数据量来说是方便快捷的。
cv::Vec<>是一个模板,但在大多数情况下不会以该形式看到或使用它。相反,cv::Vec<>模板的常见实例化有其他的名字(typedef)。它们的名称类似于cv::Vec2icv::Vec3icv::Vec4d(分别表示两个元素的整数向量、三个元素的整数向量和四个元素的双精度浮点向量)。还有其他的名字比如cv::Vec{2,3,4,6}{b,w,s,i,f,d}(每个括号拿一个出来配对)

除了 fixed vector 类,还有 fixed matrix 类。它们与模板cv::Matx<>相关联。就像 fixed vector 类一样,cv::Matx<>不是用于大型数组,而是用于处理某些特定的小矩阵运算。在计算机视觉中,有很多2×2或3×3的矩阵,还有一些4×4的矩阵,它们用于各种变换。cv::Matx<>就是为容纳这些类型的对象而设计的。与cv::Vec<>一样,cv::Matx<>通常通过cv::Matx{1,2,3,4,6}{1,2,3,4,6}{f,d}形式的 typedef 使用。重要的是要注意,对于 fixed matrix 类,其维数必须在编译时已知。

与 fixed vector 类密切相关的是 point 类,它是两个或三个基本类型值的容器。point 类是从它们自己的模板派生的,不是从 fixed vector 类直接派生出来的,但是它们可以相互转换。point 类和 fixed vector 类之间的主要区别在于,point 类的成员由命名的变量(mypoint.xmypoint.y)访问,而不是通过 vector 索引(myvec[0]myvec[1])。与cv::Vec<>一样,point 类通常通过 typedef 别名调用,用于实例化适当的模板。比如cv::Point2icv::Point2fcv::Point2d,或者cv::Point3icv::Point3fcv::Point3d

cv::Scalar类实质上是一个四维点。与 point 类一样,cv::Scalar实际上与可以生成任意四分量矢量的模板相关联,但是关键字cv::Scalar被特别 typedef 为具有双精度分量的四分量矢量。与 point 类不同,cv::Scalar对象的元素使用整数索引进行访问,与cv::Vec<>相同。这是因为cv::Scalar类直接派生自cv::Vec<>(具体地说,是从cv::Vec<double, 4>派生)。

接下来是cv::Sizecv::Rect。与 point 类一样,这两个类都是从它们自己的模板派生的。cv::Size主要通过数据成员的 widthheight 来区分,而不是xy,而cv::Rect则具有这四个成员heightwidthxy。类cv::Size实际上是cv::Size2i的别名,在 widthheight 是整数的情况下,cv::Size2i本身是更通用模板的别名。对于 widthheight 的浮点值,请使用别名cv::Size2f。类似地,cv::Rect是整数形式的矩形的别名。还有一个类表示非坐标轴平行的矩形。它名为cv::RotatedRect,包含一个cv::Point2f类型的center、一个cv::Size2f类型的size和一个float类型的angle

原文地址:https://www.cnblogs.com/thewaytotheway/p/12847232.html