第31课 轮廓周围绘制矩形框和圆形框
文章目录1. 步骤2. 相关API2.1 approxPolyDP()2.2 cv::boundingRect()2.3 cv::minAreaRect()2.4 cv::minEnclosingCircle()2.5 cv::fitEllipse()3. 例程 1. 步骤 首先将图像变为二值图像threshold() 发现轮廓,找到图像轮廓canny() 通过相关API在轮廓点上找到最小包含矩形和 圆,旋转矩形与椭圆。 绘制它们。rectangle()或circle() 2. 相关API 2.1 approxPolyDP() 基于RDP算法实现,目的是减少多边形轮廓点数 2.2 cv::bo 在计算机视觉领域,图像处理是至关重要的一环,而在这个过程中,识别和描绘图像中的对象轮廓是常见的任务之一。本篇文章将深入讲解如何在OpenCV库中利用特定的API来在轮廓周围绘制矩形框和圆形框,从而更好地理解图像中的形状特征。 我们要将图像转化为二值图像,以便于后续的轮廓检测。这通常通过调用`threshold()`函数实现,该函数接受原始图像、阈值、最大值和阈值类型,生成一个二值图像。在示例代码中,`threshold()`用于将灰度图像`src_gray`转换为二值图像`binout`。 轮廓检测是通过`findContours()`函数完成的,它需要二值图像、轮廓容器、层次结构容器以及两个枚举值:轮廓检索模式(如`RETR_TREE`)和链码存储方式(如`CHAIN_APPROX_SIMPLE`)。`findContours()`会找到图像中的所有轮廓,并将它们保存在`contours`向量中。 接下来,我们将介绍几个关键的OpenCV API,它们用于在轮廓周围绘制矩形框、圆形框和旋转矩形或椭圆: 1. **approxPolyDP()**:这个函数使用Ramer-Douglas-Peucker算法来减少多边形轮廓点的数量,以简化轮廓。输入参数包括轮廓、目标精度和一个布尔值,表示是否闭合轮廓。输出是一个简化后的多边形点集。 2. **boundingRect()**:这个函数计算出轮廓的最小外接矩形,返回一个`Rect`结构体,包含了矩形的左上角和右下角坐标。我们可以用这个信息来绘制矩形框。 3. **minAreaRect()**:这个函数返回最小面积的旋转矩形,即轮廓的最小包围矩形。它返回一个`RotatedRect`对象,包含了矩形的中心、尺寸和旋转角度,用于绘制旋转矩形。 4. **minEnclosingCircle()**:该函数找出能最小覆盖轮廓的圆形,返回一个`Point2f`对象表示圆心和一个浮点数表示圆的半径,可以用来绘制圆形框。 5. **fitEllipse()**:此函数用于找到能最小覆盖轮廓的椭圆,返回一个`RotatedRect`对象,包含椭圆的中心、主轴长度和旋转角度,可以绘制旋转椭圆。 在给出的例程中,`CallBack()`函数展示了如何应用这些API。它首先对二值图像`binout`进行轮廓检测,然后为每个轮廓调用`approxPolyDP()`、`minAreaRect()`和`fitEllipse()`。这些信息用于绘制矩形、旋转矩形和椭圆。`ellipse()`和`line()`函数分别用于绘制椭圆和矩形的边框。 `imshow()`函数用于显示结果,使得用户可以看到轮廓周围绘制的矩形和圆形框。通过调整阈值,可以观察到轮廓检测和包围图形的变化。 总结起来,OpenCV提供了丰富的工具来处理图像中的轮廓,包括找到最小的包围形状并可视化它们。这些功能对于物体检测、形状分析等计算机视觉任务至关重要,帮助我们更好地理解和解析图像内容。通过熟练掌握这些API,开发者可以构建出高效且准确的图像处理系统。