22.绘制几何图形

发布时间 2023-04-10 16:50:37作者: 夏蝉沐雪

1、绘制圆形

代码清单3-40 circle()函数原型
1.  void cv::circle(InputOutputArray img,
2.                     Point center,
3.                     int  radius,
4.                     const Scalar & color,
5.                     int  thickness = 1,
6.                     int  lineType = LINE_8,
7.                     int  shift = 0 
8.                     )
  • img:需要绘制圆形的图像

  • center:圆形的圆心位置坐标。

  • radius:圆形的半径长度,单位为像素。

  • color:圆形的颜色。

  • thickness:轮廓的宽度,如果数值为负,则绘制一个实心圆。

  • lineType:边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA

  • shift:中心坐标和半径数值中的小数位数。

2、绘制直线

代码清单3-41 line()函数原型
1.  void cv::line(InputOutputArray img,
2.                   Point pt1,
3.                   Point pt2,
4.                   const Scalar & color,
5.                   int  thickness = 1,
6.                   int  lineType = LINE_8,
7.                   int  shift = 0 
8.                   )
  • pt1:直线起始点在图像中的坐标。

  • pt2:直线终点在图像中的坐标。

  • color:圆形的颜色,用三通道表示。

3、绘制椭圆

代码清单3-42 ellipse()函数原型
1.  void cv::ellipse(InputOutputArray img,
2.                       Point center,
3.                       Size axes,
4.                       double  angle,
5.                       double  startAngle,
6.                       double  endAngle,
7.                       const Scalar & color,
8.                       int  thickness = 1,
9.                       int  lineType = LINE_8,
10.                       int  shift = 0 
11.                       )
  • center:椭圆的中心坐标。

  • axes:椭圆主轴大小的一半。

  • angle:椭圆旋转的角度,单位为度。

  • startAngle:椭圆弧起始的角度,单位为度。

  • endAngle:椭圆弧终止的角度,单位为度

4、椭圆边界像素坐标的输出

代码清单3-43 ellipse2Poly()函数原型
1.  void cv::ellipse2Poly(Point center,
2.                             Size axes,
3.                             int   angle,
4.                             int  arcStart,
5.                             int   arcEnd,
6.                             int   delta,
7.                             std::vector< Point > & pts
8.                             )
  • delta:后续折线顶点之间的角度,它定义了近似精度。

  • pts:椭圆边缘像素坐标向量集合。

5、绘制多边形

代码清单3-44 rectangle()函数原型
1.  void cv::rectangle(InputOutputArray img,
2.                         Point pt1,
3.                         Point pt2,
4.                         const Scalar & color,
5.                         int  thickness = 1,
6.                         int  lineType = LINE_8,
7.                         int  shift = 0 
8.                         )
9.  
10.  void cv::rectangle(InputOutputArray img,
11.                         Rect rec,
12.                         const Scalar & color,
13.                         int  thickness = 1,
14.                         int  lineType = LINE_8,
15.                         int  shift = 0 
16.                         )
  • pt1:矩形的一个顶点

  • pt2:矩形中与pt1相对的顶点,即两个点在对角线上。

  • rec:矩形左上角定点和长宽。

  函数中与前文参数含义一致的参数不再重复介绍。在OpenCV 4中定义了两种函数原型,分别利用矩形对角线上的两个顶点的坐标或者利用左上角顶点坐标和矩形的长和宽唯一确定一个矩形。在绘制矩形时,同样可以控制边缘线的宽度绘制一个实心的矩形。

  这里我们详细介绍Rect变量,该变量在OpenCV 4中表示矩形的含义,与Point、Vec3b等类型相同,都是在图像处理中常用的类型。Rect表示的是一个矩形的左上角和矩形的长和宽,该类型定义的格式为Rect(像素的x坐标,像素的y坐标,矩形的宽,矩形的高),其中可以存放的数据类型也分别为int型(Rect2i或者Rect)、double类型(Rect2d)和float类型(Rect2f)。

代码清单3-45 fillPoly()函数原型
1.  void cv::fillPoly(InputOutputArray img,
2.                        const Point ** pts,
3.                        const int * npts,
4.                        int   ncontours,
5.                        const Scalar & color,
6.                        int  lineType = LINE_8,
7.                        int   shift = 0,
8.                        Point offset = Point()
9.                        )
  • pts:多边形顶点数组,可以存放多个多边形的顶点坐标的数组。

  • npts:每个多边形顶点数组中顶点个数。

  • ncontours:绘制多边形的个数。

  • offset:所有顶点的可选偏移。

  函数通过依次连接多边形的顶点来实现多边形的绘制,多边形的顶点需要按照顺时针或者逆时针的顺序依次给出,通过控制边界线宽度可以实现是否绘制实心的多边形。需要说明的是pts参数是一个数组,数组中存放的是每个多边形顶点坐标数组,npts参数也是一个数组,用于存放pts数组中每个元素中顶点的个数。