关于OpenCV的数据结构,官方文档位于:Core functionality
注意,下文中提到的C语言中的结构:例如:CvPoint和CvPoint2D32f
,
位于C structures and operations,4.x之后的文档就没有这些内容了。
虽然文档没有了,但是源文件里依然有opencv-4.8.0/modules/core/include/opencv2/core/types_c.h
相应的头文件
参考:
cv::Vec<>——固定向量类(所存储的元素长度固定),用于维度固定的小型向量
cv::Vec< _Tp, cn > Class Template Reference
虽然cv::Vec<>
本身已经是模版形式了,但是实际上并不会直接使用这个形式。而是使用typedef定义的别名来使用一些更为通用/专门的实例。
cv::Vec{2,3,4,6}{b,w,s,i,f,d}
形式的声明,表示6种数据类型中某个具有2~6个元素数量的向量类型。
另外,需要注意的一点是,在cv::Vec< _Tp, cn > Class Template Reference中,有:
即 cv::Vec< >模版类继承自cv::Matx< >模板类。
除了cv::Vec<>固定向量类,还有cv::Matx<>固定矩阵类,
与cv::Vec<>类似,cv::Matx<>也是用于特定的一些小型矩阵中。
(cv::Mat类是用于任意维度的矩阵,一般用在大矩阵,比如存储图像等)
在计算机视觉中,有很多2X2,3X3以及少量的4X4矩阵(例如:3*3的卷积核,3*3或者2*2的变换矩阵等),cv::Matx<>用于设计容纳这些对象。
与cv::Vec<>类似,cv::Matx<>通常也是用别名的形式进行使用,其形式为:
cv::Matx{1,2,3,4,5,6}{1,2,3,4,5,6}{f,d}
,只有浮点数类型和双浮点数类型。
在OpenCV——Basic structures——Typedefs中,可以看到:
固定矩阵类的维度在编译前已知,因此其运算效率高,消除很多动态内存分配操作。
typedef Point2i Point;
默认使用cv::Point
时其实调用的是cv::Point2i
cv::Point2i
是typedef cv::Point_
cv::Point_类和cv::Point3_类
OpenCV中的Point类包括cv::Point3_和cv::Point_
与cv::Vec<>类似,cv::PointX通常也通过别名调用,
在OpenCV——Basic structures——Typedefs中,有:
在cv::Scalar_< _Tp > Class Template Reference中,可以看到:
cv::Scalar_
继承自cv::Vec<_Tp,4>
,即本质上是一个4维的固定向量。
即
cv::scalar
类直接继承自cv::Vec4d
(cv::Vec)
typedef cv::Point2i cv::Point
typedef cv::Size2i cv::Size
typedef cv::Rect2i cv::Rect
cv::Size
类和cv::Rect
类与cv::Point
类类似,但是也并不继承自cv::Point类,而是继承自己的模板类
cv::Size
有width和height这两个属性,而不是cv::Point_
类的x和ycv::Rect
则是包含width、height、x和y这四个属性。cv::Size_类和cv::Rect_一般也是通过别名使用,比如:
cv::RotatedRect类表示非轴对称的矩形,即矩形的四条边不与所在坐标轴平行,表示旋转的矩形。其包括:
RotatedRect (const Point2f ¢er, const Size2f &size, float angle)
1. Point2f类型的中心点
2. Size2f类型的高宽
3. float的角度
Cast to the fixed vector classes,映射成固定向量类,类似强制类型转换。
根据cv::Point3_< >和 cv::Point_< >的Public Member Functions
可知:
cv::Point_< >类的对象有inside
方法,cv::Point_< >类的对象是没有该方法的
根据cv::Scalar_< _Tp > Class Template Reference可知,
#include
#include
int main(int argc, char