为轮廓创建外接矩形和圆
在本教程中,你将学到如何:
- 使用 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”,并在其中展示我们添加到绘图中的所有内容。
结果如下:
