OpenCV Python入门:图像轮廓与边缘检测解析

需积分: 9 4 下载量 48 浏览量 更新于2024-07-07 收藏 13.12MB PPTX 举报
"这是一份关于OpenCV入门学习的PPT,主要涵盖了OpenCV的图像轮廓边缘检测,包括如何使用`cv2.findContours()`和`cv2.drawContours()`函数进行轮廓提取和绘制。作者参考了李立宗老师的《OpenCV快速入门-面向Python》一书进行学习,学习时间从2021年12月27日至2022年1月4日。" 在OpenCV中,图像轮廓处理是一个关键环节,它能够将图像的边缘连接成连续的整体,以便进行后续的分析和处理。图像边缘检测虽然能够检测出物体的边界,但这些边界通常不连续,而轮廓则能够将这些断裂的边缘连成一个封闭的形状。`cv2.findContours()`函数是OpenCV中用于寻找图像内轮廓的工具,它能够返回一组轮廓信息,包括实际的轮廓点数组以及图像的拓扑信息。 `cv2.findContours(image, mode, method)`函数的参数解释如下: - `image`: 输入图像,应为8位单通道图像,通常在调用此函数前,我们使用阈值处理将图像转换为二值图像。 - `mode`: 轮廓检索模式,决定了轮廓如何组织。常用的有: - `cv2.RETR_EXTERNAL`: 只检索外部轮廓,忽略内部轮廓。 - `cv2.RETR_LIST`: 检索所有轮廓,但不建立层次关系。 - `cv2.RETR_CCOMP`: 检索所有轮廓,建立两级层次结构,外层为外边界,内层为内孔边界。 - `cv2.RETR_TREE`: 建立完整的轮廓等级树结构,包含所有轮廓的父子关系。 - `method`: 轮廓近似方法,控制如何存储轮廓点。例如: - `cv2.CHAIN_APPROX_NONE`: 存储所有轮廓点,这是最详细但也是最占用内存的方式。 `cv2.drawContours()`函数则用于将找到的轮廓绘制到图像上,可以自定义线条样式、颜色和粗细。这个函数接受的参数包括原图像、轮廓列表、轮廓层次信息以及可选的绘制参数,允许用户选择绘制全部轮廓或特定轮廓。 轮廓的拓扑信息`hierarchy`是一个四维向量,每个元素分别表示当前轮廓在层次结构中的位置: - `Next`: 后一个轮廓的索引编号。 - `Previous`: 前一个轮廓的索引编号。 - `First_Child`: 第一个子轮廓的索引编号。 - `Parent`: 父轮廓的索引编号。 通过这些信息,我们可以理解图像中轮廓之间的嵌套和关联关系,这对于处理具有复杂结构的图像特别有用,比如分割具有内含孔洞的物体。 学习OpenCV的轮廓处理部分,不仅可以帮助我们更好地理解和分割图像,还可以为对象识别、形状分析等高级任务打下坚实的基础。在实践中,开发者可以根据具体需求选择合适的轮廓检索模式和近似方法,以优化性能和效果。