Skip to content

为轮廓创建外接矩形和圆

在本教程中,你将学到如何:

  • 使用 OpenCV 函数 cv::boundingRect
  • 使用 OpenCV 函数 cv::minEnclosingCircle

下面是本教程的代码。你也可以从以下地址下载:

main 函数相当简单,按照注释所述我们执行如下操作:

  • 打开图像,将其转换为灰度图并进行模糊处理以消除噪声。

  • 创建一个标题为 “Source” 的窗口,并在其中显示源文件。

  • 在 source_window 上创建一个滑动条(trackbar),并为其指定一个回调函数。通常回调函数用于对某种信号做出反应,在我们的例子中就是滑动条状态的改变。需要显式地一次性调用 thresh_callback,以便让 “Contours” 窗口与 “Source” 窗口同时显示。

回调函数完成了所有有趣的工作。

  • 使用 cv::Canny 检测图像中的边缘。

  • 查找轮廓并将它们保存到向量 contour 和 hierarchy 中。

  • 对于每一个找到的轮廓,我们以 +-3 的精度将其近似为多边形,并指明曲线必须是闭合的。之后我们为每个多边形找到外接矩形,并将其保存到 boundRect 中。最后,我们为每个多边形找到最小外接圆,并将其保存到 center 和 radius 向量中。

我们已经找到了所需的一切,接下来要做的就是绘制。

  • 创建一个新的、填充为零的无符号 8 位字符 Mat。它将包含我们将要绘制的所有图形(矩形和圆)。

  • 对于每个轮廓:选取一个随机颜色,并用它绘制轮廓、外接矩形和最小外接圆。

  • 显示结果:创建一个新窗口 “Contours”,并在其中展示我们添加到绘图中的所有内容。

结果如下:

Bounding_Rects_Circles_Source_Image.jpg Bounding_Rects_Circles_Result.jpg