基本几何图形绘制
本教程中你将学到如何:
- 使用 OpenCV 函数 line() 绘制一条直线
- 使用 OpenCV 函数 ellipse() 绘制一个椭圆
- 使用 OpenCV 函数 rectangle() 绘制一个矩形
- 使用 OpenCV 函数 circle() 绘制一个圆
- 使用 OpenCV 函数 fillPoly() 绘制一个填充多边形
OpenCV 理论
Section titled “OpenCV 理论”在本教程中,我们将大量使用两个结构:cv::Point 和 cv::Scalar: 在本教程中,我们将大量使用两个结构:cv::Point 和 cv::Scalar: 在本教程中,我们将大量使用 Python 中的元组来替代 cv::Point 和 cv::Scalar:
Point(点)
Section titled “Point(点)”它表示一个二维点,由其图像坐标 与 指定。我们可以这样定义它:
Point pt;pt.x = 10;pt.y = 8;或
Point pt = Point(10, 8);Point pt = new Point();pt.x = 10;pt.y = 8;或
Point pt = new Point(10, 8);pt = (10, 0) # x = 10, y = 0Scalar(标量)
Section titled “Scalar(标量)”- 表示一个 4 元素向量。Scalar 类型在 OpenCV 中被广泛用于传递像素值。
- 在本教程中,我们将大量使用它来表示 BGR 颜色值(3 个参数)。如果最后一个参数不会用到,则不必定义。
- 来看一个例子,如果要求提供一个颜色参数,而我们给出:
Scalar( a, b, c ) Scalar( a, b, c ) ( a, b, c )
我们就定义了一个这样的 BGR 颜色:*Blue = a*、*Green = b*、*Red = c*。-
该代码位于你的 OpenCV 示例文件夹中。你也可以从 这里 获取。 代码见下方示例
-
该代码位于你的 OpenCV 示例文件夹中。你也可以从 这里 获取。 代码见下方示例
-
该代码位于你的 OpenCV 示例文件夹中。你也可以从 这里 获取。 代码见下方示例
由于我们打算绘制两个示例(一个原子和一个 rook),我们需要创建两幅图像和两个窗口来显示它们。
我们创建了一些函数来绘制不同的几何形状。例如,绘制原子时使用了 MyEllipse 与 MyFilledCircle:
而绘制 rook 时使用了 MyLine、rectangle 以及 MyPolygon:
下面我们逐个查看这些函数的内部实现:
MyLine
Section titled “MyLine”- 可以看到,MyLine 只是调用了函数 line(),该函数执行如下操作:
- 从点 start 到点 end 绘制一条直线
- 该直线显示在图像 img 中
- 直线颜色由
B( 0, 0, 0 )定义,这是对应 Black(黑色)的 RGB 值 - 线宽设置为 thickness(本例中为 2)
- 该直线是 8 连通的(lineType = 8)
MyEllipse
Section titled “MyEllipse”-
从上面的代码可以看到,函数 ellipse() 绘制一个满足如下条件的椭圆:
- 该椭圆显示在图像 img 中
- 椭圆中心位于点
B(w/2, w/2),并包含在一个大小为B(w/4, w/16)的外接矩形中 - 椭圆旋转了 angle 度
- 椭圆的弧在 0 到 360 度之间
- 图形的颜色为
B( 255, 0, 0 ),即在 BGR 值中表示蓝色 - 椭圆的 thickness(线宽)为 2
MyFilledCircle
Section titled “MyFilledCircle”-
与椭圆函数类似,可以看到 circle 接收如下参数:
- 用于显示该圆的图像(img)
- 圆心,由点 center 表示
- 圆的半径:w/32
- 圆的颜色:
B( 0, 0, 255 ),在 BGR 中表示 Red(红色) - 由于 thickness = -1,该圆将被填充绘制
MyPolygon
Section titled “MyPolygon”-
绘制填充多边形时,我们使用函数 fillPoly()。需要注意:
- 多边形将绘制在 img 上
- 多边形的顶点是 ppt 中的点集
- 多边形的颜色由
B( 255, 255, 255 )定义,这是 white(白色)的 BGR 值
rectangle
Section titled “rectangle”-
最后是 cv::rectangle 函数(我们并没有为它单独创建一个特殊函数)。需要注意:
- 矩形将绘制在 rook_image 上
- 矩形的两个对角顶点由
B( 0, 7*w/8 )与B( w, w )定义 - 矩形的颜色由
B( 0, 255, 255 )给出,这是 yellow(黄色)的 BGR 值 - 由于线宽值由 FILLED (-1) 给出,该矩形将被填充
编译并运行你的程序后,应当会得到类似如下的结果: