【opencv12】cv::Size/cv::Rect/cv::
2018-12-18 本文已影响42人
yuanCruise
1.cv::Size类
在实践中,size类与对应的Point点类(一致类型的)类似,可以互相转换。主要的区别在size类中的两个数据成员叫做和,而在Point点类中的连个数据成员叫做和。size类的三个别名为:cv::Size, cv::Size2i, 和 cv::Size2f。前面两个是相同的用来表示整型size,而最后一个是32位浮点型size。
操作 | 例子 |
---|---|
默认构造函数 | cv::Size sz;cv::Size2i sz;cv::Size2f sz; |
带值的构造函数 | cv::Size2f sz( w, h ); |
访问函数成员 | sz.width; sz.height; |
compute area | sz.area(); |
与Point点类不同,size类不支持强制转换为固定向量类(cv::Vec)。这意味着size类的应用将会有更多的限制。另一方面,Point点类和固定向量类可以毫无问题地转换为size类。
2.cv::Rect类
Rect矩形类包括Point点类的成员和(表示矩形的左上角)以及size类的成员和(表示矩形的大小)。但是,矩形类不会从Point点类或size类继承,因此通常不会从它们继承操作符。
操作 | 例子 |
---|---|
默认构造函数 | cv::Rect r; |
拷贝构造函数 | cv::Rect r2( r1 ); |
带值的构造函数 | cv::Rect( x, y, w, h ); |
用点类和size类创建 | cv::Rect( p, sz ); |
双角创建 | cv::Rect( p1, p2 ); |
访问函数成员 | r.x; r.y; r.width; r.height; |
compute area | r.area(); |
提取左上角 | r.tl(); |
提取右下角 | r.br(); |
point点类p是否在rect类r中 | r.contains( p ); |
Rect还支持各种重载运算符,可用于计算两个矩形或一个矩形和另一个对象的各种几何属性。
操作 | 例子 |
---|---|
两个矩阵相交的矩阵 | cv::Rect r3 = r1 & r2;r1 &= r2; |
包含矩形r1和r2的最小矩形的面积 | cv::Rect r3 = r1 | r2;r1 |= r2; |
将矩形r平移x | cv::Rect rx = r + x;r += x; |
将矩形r按大小s进行放大 | cv::Rect rs = r + s;r += s; |
比较矩形r1和r2是否完全相等 | bool eq = (r1 == r2); |
比较矩形r1和r2是否不相等 | bool ne = (r1 != r2); |
3.cv::RotatedRect类
RotatedRect类是c++ OpenCV接口中为数不多的不是底层模板类。相反,它是一个容器,其中包含cv::Point2f类型称为center, cv::Size2f类型的称为size,以及一个额外的值称为angle的选择,后者表示围绕中心的矩形的旋转。cv::RotatedRect和cv::Rect之间有一个非常重要的区别,即cv::RotatedRect位于相对于其中心的“空间”中,而cv::Rect位于相对于其左上角的位置。
操作 | 例子 |
---|---|
默认构造函数 | cv::RotatedRect rr(); |
拷贝构造函数 | cv::RotatedRect rr2( rr1 ); |
带值的构造函数,一个point一个size一个角度值 | cv::RotatedRect rr( p, sz, theta ) ; |
双角创建 | cv::RotatedRect( p1, p2 ); |
访问函数成员 | rr.center; rr.size; rr.angle; |
返回拐角的列表 | rr.points( pts[4] ); |