OpenCV进阶--在图像上绘制几何图形

        我们需要在图像中绘制一些图案一起突出某些内容的作用。在OpenCV中有许多绘制几何图形的方法。

一、绘制圆形

        在OpenCV中提供了circle()函数用于绘制圆形,代码原型如下:

void cv::circle(InputOutputArray img,
                Point center,
                int radius,
                const Scalar& color,
                int thickness = 1,
                int lineType = LINE_8,
                int shift = 0
                )

img:需要绘制圆形的图像。

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

radius:直线圆形的半径,单位为像素。

color:圆形的颜色。

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

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

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

二、绘制直线

        在OpenCV中提供了line()函数用于绘制直线,代码原型如下:

void cv::line(InputOutArray img,
              Point pt1,
              Point pt2,
              const Scalar& color,
              int thickness = 1,
              int lineType = LINE_8,
              int shift = 0
              )

pt1:直线起点在图像中的坐标。

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

color:直线的颜色,用三通道表示。

三、绘制椭圆

        在OpenCV中提供了ellipse()函数用于绘制椭圆,代码原型如下:

void cv::ellipse(InputOutputArray img,
                 Point center,
                 Size axes,
                 double angle,
                 double startAngle,
                 double endAngle,
                 const Scalar& color,
                 int thickness = 1,
                 int lineType = LINE_8,
                 int shift = 0
                 )

center:椭圆的中心坐标。

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

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

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

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

        在这里相同意义的参数不在介绍。

        在OpenCV中还提供了另一个名为ellipse2Poly()的函数用于输出椭圆边界的像素坐标,但是不会在图像中绘制椭圆,代码原型如下:

void cv::ellipse2Poly(Point center,
                      Size axes,
                      int angle,
                      int arcStart,
                      int arcEnd,
                      int delta,
                      std::vector< Point >& pts
                      )

delta:后续折线顶点之间的角度,它定义了近似精度。

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

四、绘制多边形

        在OpenCV中提供了函数rectangle()函数fillPoly()用于绘制多边形,代码原型如下:

void cv::rectangle(InputOutArray img,
                   Point pt1,
                   Point pt2,
                   const Sclar& color,
                   int thickness = 1,
                   int lineType = LINE_8,
                   int shift = 0
                   )


void cv::rectangle(InputOutArray img,
                   Rect rec,
                   const Scalar& color,
                   int thickness = 1,
                   int lineType = LINE_8,
                   int shift = 0
                   )

pt1:矩形的一个顶点。

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

rec:矩形左上角顶点和长度。

        在这里我们详细介绍Rec变量,该变量在OpenCV中表示矩形的含义,与Point,Vec3b等类型相同,Rect表示的是矩形的左上角像素坐标,以及矩形的长和宽,该类型定义的格式为Rect(像素的X坐标,像素的Y坐标,矩形的宽,矩形的高)。

void cv::fillPoly(InputOutputArray img,
                  const Point ** pts,
                  const int * npts,
                  int ncontours,
                  const Scalar & color,
                  int lineType = LINE_8,
                  int shift = 0,
                  Point offset = Point()
                  )

pts:多边形顶点数组,可以存放多个多边形的顶点坐标的数组。

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

ncoutours:绘制多边形的个数。

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

五、文字生成

        在OpenCV中实现在图像生成的文字putText()函数,函数原型如下:

void cv::putText(InputOutputArray img,
                 const String& text,
                 Point org,
                 int fontFace,
                 double fontScale,
                 Scalar color,
                 int thickness = 1,
                 int lineType = LINE_8,
                 bool bottomLeftOrigin = false
                 )

text:输出到图像的文字,目前OpenCV只支持英文。

org:图像中文字字符的左下角像素坐标。

fontFace:字体类型的选择标志、参数取值范围及含义在下表中给出。

fontScale:字体的大小。

bottomLeftOrigin:图像数据原点的位置。默认为左上角;如果参数改为true,则原点为左下角。

fontFace字体类型及含义
标志取值含义
FONT_HERSHEY_DUPLEX2正常大小的较复杂的无衬线字体
FONT_HERSHEY_COMPLEX3正常大小的衬线字体
FONT_HERSHEY_TRIPLEX4正常大小的较复杂的衬线字体
FONT_HERSHEY_COMPLEX_SMALL5小尺寸的衬线字体
FONT_HERSHEY_SCRIPT_SIMPLEX6手写风格的字体
FONT_HERSHEY_SCRIPT_COMPLEX7复杂的手写风格字体
FONT_ITALIC16斜体字体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值