- OpenCV 4计算机视觉:Python语言实现(原书第3版)
- (加)约瑟夫·豪斯 (爱尔兰)乔·米尼奇诺
- 576字
- 2025-02-26 19:14:21
3.9 轮廓检测
轮廓检测是计算机视觉中的一项重要任务。我们希望检测图像或者视频帧中包含的主体轮廓,这不仅是其本身的目的,而且也是其他操作的一个步骤。这些操作包括多边形边界、近似形状以及常见感兴趣区域(Region Of Interest,ROI)的计算。感兴趣区域极大地简化了与图像数据的交互,因为在NumPy中很容易用数组切片定义矩形区域。在探索物体检测(包括人脸检测)和物体跟踪的概念时,我们会经常使用轮廓检测和感兴趣区域。
我们通过一个例子来熟悉一下这个API:

首先,创建一幅空白的黑色图像,大小为200×200像素。然后,利用数组的能力为切片赋值,在其中心放置一个白色的正方形。
接着,阈值化图像并调用findContours函数。这个函数有3个参数:输入图像、层次结构类型以及轮廓近似方法。第2个参数指定函数返回的层次结构树类型。其中一个值是cv2.RETR_TREE,它让函数检索外部轮廓和内部轮廓的完整结构。如果在较大物体(或者较大区域)内搜索较小的物体(或者较小的区域),这些关系可能很重要。如果只想检索最外部的轮廓,请使用cv2.RETR_EXTERNAL。在物体出现于普通的背景上并且我们不关心是否搜索物体内的对象的情况下,这可能是一种好的选择。
回顾代码示例,请注意,findContours函数返回2个元素:轮廓及其层次结构。我们使用轮廓线在彩色图像上绘制绿色的轮廓。最后,显示图像。
结果是轮廓用绿色绘制的一个白色正方形——一个斯巴达场景,但是有效地展示了此概念!我们再来看一个更有意义的例子。