如何在OpenCV Python中查找并绘制图像轮廓的凸包?
凸包看起来类似于轮廓近似,但它并不完全是轮廓近似。凸包是一个凸的曲线,围绕着一个物体。凸曲线总是鼓出或至少是平的。凸包可以找到凸性缺陷并进行纠正。
语法
为了找到凸包,我们使用以下函数 –
参数
- cnt 是轮廓点。它表示为轮廓点的数组。
-
hull 是输出,通常我们避免使用它。
-
clockwise -方向标志。如果为True,则输出凸包是顺时针定向的,否则是逆时针定向的。
-
returnPoints -默认设置为True。
输出 -当returnPoints设置为True时,它返回凸包点的坐标。如果它设置为False,则返回与凸包点对应的轮廓点的索引。
因此,通常使用以下凸包来获取凸包 –
要绘制凸包点的轮廓,请使用此函数 –
步骤
您可以使用以下步骤查找并绘制图像轮廓的凸包 –
导入所需的库。在以下所有Python示例中,所需的Python库为OpenCV。确保您已经安装它。
使用 cv2.imread() 读取输入图像并将其转换为灰度。
在灰度图像上施加阈值处理,以创建二进制图像。
使用 cv2.findContours() 函数查找图像中的轮廓。
选择轮廓 cnt 或遍历所有轮廓。使用 cv2.convexHull(cnt) 函数找到轮廓 cnt 的凸包。
将凸包点传递给以下函数,在输入图像上绘制凸包。
显示带有绘制凸包的图像。
让我们看一些示例以更好地理解。
示例1
在下面的Python程序中,我们检测图像中的轮廓并为第一个轮廓查找凸包。我们还在图像上绘制了第一个轮廓和凸包。
我们将使用以下图像作为 输入文件 在上面的程序代码中。
输出
当执行上述代码时,将会产生以下输出 **** −
我们得到以下 输出窗口 ,显示了图像中检测到的第一个轮廓和凸包 –
轮廓以蓝色绘制,凸包以黄色绘制。请注意轮廓和凸包之间的差异。
示例2
在本示例中,我们检测图像中的轮廓并找到所有轮廓的凸包。我们还在图像上绘制了所有轮廓和凸包。
我们将使用这张图片作为 输入文件 在这个程序中 −
输出
当你运行上述代码时,它会产生下面的 输出 −
我们得到以下的 输出窗口 ,显示在图像中检测到的轮廓和凸包 −
凸包用红色表示,轮廓用绿色表示。注意轮廓和凸包之间的差异。