47.cv2.findCountours()
什么是图像轮廓?
图像轮廓是指图像中物体边缘的连续性曲线。在计算机视觉和图像处理中,轮廓通常被用于检测物体、分割图像以及提取物体特征。
图像轮廓是由一系列连续的像素点组成,这些像素点位于物体边界上。轮廓的特点是在物体和背景之间的边界位置,因此可以用来表示物体的形状和结构。轮廓可以是闭合的,也可以是开放的,具体取决于物体的形状。
图像轮廓的应用场景?
图像轮廓在许多应用场景中都发挥着重要作用,下面列举了一些常见的应用场景:
目标检测与识别: 图像轮廓可以用于检测和定位图像中的物体。通过检测物体的轮廓,可以识别出图像中的不同物体并进行分类。
图像分割: 轮廓可以用来分割图像中的不同区域或物体。通过提取物体的轮廓,可以将图像分成多个不同的部分,方便进一步分析和处理。
医学图像分析: 在医学图像中,轮廓可以用来标记器官、病变或细胞等结构。这对于诊断和治疗决策具有重要意义。
工业自动化: 在工业自动化中,轮廓可以用于检测产品的缺陷、测量尺寸和定位部件,从而实现自动化生产和质量控制。
机器人视觉: 机器人可以利用图像轮廓来感知环境和物体,从而实现自主导航、抓取物体等任务。
计算机辅助设计(CAD): 在CAD领域,图像轮廓可以用于从实际物体中获取几何信息,以便在计算机上进行建模和设计。
虚拟现实与增强现实: 图像轮廓可以用来实时跟踪物体,将虚拟对象与实际场景进行交互,从而创建更加逼真的虚拟现实或增强现实体验。
图像重建与三维建模: 利用物体的轮廓可以进行图像的重建和三维建模,从而生成立体的物体模型。
边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。
OpenCV 提供了查找图像轮廓的函数 cv2.findContours()
,该函数能够查找图像内的轮廓信息,而函数 cv2.drawContours()能够将轮廓绘制出来。
图像轮廓是图像中非常重要的一个特征信息,通过对图像轮廓的操作,我们能够获取目标图像的大小、位置、方向等信息。
查找图像轮廓:findContours函数
函数 cv2.findContours()的语法格式为:
image, contours, hierarchy = cv2.findContours( image, mode, method)
式中的返回值为:
- image:与函数参数中的原始图像 image 一致。
- contours:返回的轮廓。
- hierarchy:图像的拓扑信息(轮廓层次)。
式中的参数为:
- image:原始图像。8 位单通道图像,所有非零值被处理为 1,所有零值保持不变。也就是说灰度图像会被自动处理为二值图像。在实际操作时,可以根据需要,预先使用阈值处理等函数将待查找轮廓的图像处理为二值图像。
- mode:轮廓检索模式。
- method:轮廓的近似方法。
函数 cv2.findContours()的返回值及参数的含义比较丰富,下面对上述返回值和参数逐一做出说明。
1. 返回值image
该返回值与参数 image 是一致的,就是原始输入图像。在 OpenCV 4.X 中,该返回值已经被取消。在 OpenCV 4.X 中,函数 cv2.findContours()仅有两个返回值,其语法格式为:
contours, hierarchy = cv2.findContours( image, mode, method)
2. 返回值contours
该返回值返回的是一组轮廓信息,每个轮廓都是由若干个点所构成的。例如,contours[i] 是第 i 个轮廓(下标从 0 开始),contours[i][j]是第 i 个轮廓内的第 j 个点。
图 12-1 所示为提取的轮廓示例,函数 cv2.findContours()提取出左图的 3 个轮廓,每一个轮廓都是由若干个像素点构成的。