版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qiu931110/article/details/85174246
正如我们所知道的,opencv中的数据类型多由模板类进行创建,因此对于点类而言也是如此,支持各种类型如int,float等等的不同数据类型的point。点类的开销相对是很少的,因为该类上并未定义太多操纵,在需要的时候它们可以转化为更为一般的类型,例如固定向量类or固定矩阵类(之后讨论)。主要有两种模板,一种是二维的点,一种是三维的点。
一般通过下面的语句来实例化point对象。
cv::Point2i
cv::Point3f
语句中最后的i,f等所表达的意思为:
b是unsigned character,
s是short integer,
i是32-bit integer,
f是32-bit floating-point number,
d是64-bit floating-point number.
下表是一些point类直接支持的操作。
操作 | 例子(3可以换成2) |
---|---|
默认构造方法 | cv::Point3i p; |
拷贝构造方法 | cv::Point3f p2( p1 ); |
带初始化值的构造方法 | cv::Point3d p( x0, x1, x2 ); |
转换到固定向量类 | (cv::Vec3f) p; |
成员访问 | p.x; p.y;p.z(2的时候没有z) |
点积操作 | float x = p1.dot( p2 ) |
双精度点积操作 | double x = p1.ddot( p2 ) |
矢量积操作 | p1.cross( p2 )(只针对3维point) |
判断point是否在矩阵r中 | p.inside( r )(只针对2维point) |
这些类型可以被强制转换成old C类型的CvPoint和CvPoint2D32f。如果一个point类的实例被强制转换成CvPoint,那么该值将被四舍五入。