经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。 |
有时我们需要根据自身的需求在图像中绘制一些图案以起到突出某些内容的作用,例如在某些特别的区域用圆圈起来,或者在图中输入文字进行说明。因此本节将介绍OpenCV 4中用于绘制基础图形的函数。
绘制圆形
圆形是我们在平时中最常使用的图形之一,OpenCV 4中提供了circle()函数用于绘制圆型,其函数的函数原型在代码清单3-40中给出。
代码清单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:中心坐标和半径数值中的小数位数。
该函数用于在一张图像中绘制圆形的图案,输入的参数分别是圆形的圆形位置、半径长度以及边界线的宽度和线型。对于该函数的使用我们将在本节最后的代码清单3-47中一起给出。
绘制直线
接下来介绍如何在图像中绘制直线。OpenCV 4中提供了line()函数用于绘制直线,其函数原型在代码清单3-41中给出。
代码清单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:圆形的颜色,用三通道表示。
该函数利用两点确定一条直线的方式在图像中画出一条直线,函数中的很多参数的含义都与circle()函数一致,这里就不在赘述。对于该函数的使用我们将在本节最后的代码清单3-47中一起给出。
绘制椭圆
在OpenCV 4中提供了ellipse()函数用于绘制椭圆,其函数原型在代码清单3-42中所示。
代码清单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:椭圆弧终止的角度,单位为度
该函数中的很多参数的含义都与circle()函数一致,这里就不在赘述。函数通过选定椭圆中心位置和主轴的大小唯一确定一个椭圆,并且可以控制旋转角度改变椭圆在坐标系中的位置。通过椭圆弧起始和终止角度,可以绘制完整的椭圆或者一部分椭圆弧。与circle()函数一致,当边界线的厚度值为负数的时候,将绘制一个实心的椭圆。
在OpenCV 4中还提供了另外一个函数ellipse2Poly()用于输出椭圆的边界的像素坐标,但是不会在图像中绘制椭圆,其函数原型在代码清单3-43中给出。
代码清单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:椭圆边缘像素坐标向量集合。
该函数与绘制椭圆需要输入的参数一致,只是不将椭圆输出到图像中,而是通过vector向量将椭圆边缘的坐标点存储起来,便于后续的再处理。对于绘制椭圆相关函数的使用我们将在本节最后的代码清单3-47中一起给出。
绘制多边形
在几何中多边形也是一个重要的成员,而多边形中矩形又是一个比较特殊的类型,因此OpenCV 4中除了提供绘制多边形的函数fillPoly()外,也提供了绘制矩形的函数rectangle()。我们先介绍矩形的绘制,之后再介绍多边形的绘制。在代码清单3-44中给出了rectangle()函数的函数原型。
代码清单3-44 rectangle()函数原型
1. void cv::rectangle(InputOutputArray img,
2. Point pt1,
3. Point pt2,
4. const Scalar & color,
5.