Opencv视觉学习--findContours()轮廓提取
发布日期:2021-05-10 23:38:09 浏览次数:17 分类:精选文章

本文共 1679 字,大约阅读时间需要 5 分钟。

OpenCV入门:深入理解findContours函数

对于刚开始接触OpenCV的开发者来说,查找优质资料是自学的最佳途径。本文将详细介绍如何利用OpenCV的findContours函数进行轮廓提取操作。

环境搭建

在开始编写代码之前,确保您的开发环境配置正确。以下是推荐的配置:

  • 操作系统:Ubuntu 18.04
  • 库文件:OpenCV 4.1.0
  • 界面框架:QT 5.12

OpenCV基础知识

在深入使用findContours函数之前,熟悉OpenCV的基础操作是必不可少的。下面是一些常用工具函数建议:

  • 二值化图像:使用thresholdadaptiveThresholdCanny将图像转换为二值图像。
  • 图像处理:可以使用compareinRange等函数进行图像均衡、降噪等处理。

findContours函数基本用法

findContours函数的主要功能是从二值图像中检测出所有轮廓。函数接口如下:

void cv::findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point())

参数说明

  • image:输入图像,必须为单通道图像。可以使用相应的函数将图像转换为二值图像。
  • contours:存储检测到的轮廓,每个轮廓以点向量形式表示。
  • hierarchy:可选的输出向量,包含图像的拓扑信息。这一参数对分析轮廓数量和结构有重要作用。
  • mode:轮廓检索模式,常用的有:
    • RETR_EXTERNAL:仅检测最外层轮廓。
    • RETR_LIST:提取所有轮廓但不建立等级关系。
    • RETR_CCOMP:将轮廓组织为双层结构。
    • RETR_TREE:提取所有轮廓并重新建立复杂的轮廓结构。
  • method:轮廓近似方法。常用的有:
    • CHAIN_APPROX_NONE:获取每个轮廓的每个像素。
    • CHAIN_APPROX_SIMPLE:压缩水平和垂直方向的坐标点。
    • CHAIN_APPROX_TC89_L1CHAIN_APPROX_TC89_KCOS:使用Teh-Chinl链逼近算法进行轮廓近似。
  • offset:轮廓点的偏移量,默认为Point()。在分析区域内轮廓时非常实用。
  • 具体使用步骤

    以下是一个完整的轮廓检测流程示例:

    vector
    > contours;
    vector
    hierarchy;
    findContours(bin_img, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));

    返回值分析

    • contours:存储了所有检测到的轮廓。每个轮廓包含多个点,点的顺序决定了轮廓的形状。
    • hierarchy:如果选择RETR_TREE模式,每个轮廓都包含其父轮廓和子轮廓信息。这些信息对于图像的分割和分析具有重要意义。

    常见问题解答

  • 图像必须是单通道图像:这是findContours函数的一个重要前提条件。可以通过cv::cvtColor 将颜色图像转换为灰度图像。
  • 轮廓太过复杂或不完整:根据需求调整method参数,选择合适的轮廓近似方法。
  • hierarchy参数如何解读:每个hierarchy元素包含4个值,依次表示后继轮廓、前驱轮廓、父轮廓和嵌套级别。如果没有对应的轮廓,设置为-1。
  • 实际应用案例

    通过以上方法,你可以轻松实现各种图像分析任务。例如:

    • 人脸识别:提取人脸轮廓进行特征提取。
    • 物体检测:识别图像中的主要对象轮廓。
    • 文字检测:提取文字轮廓并用于字符识别。

    通过以上技术,你已经掌握了OpenCV中findContours函数的核心运用方法。可以根据实际需求进行代码修改和优化,开拓你的图像处理世界!如有任何疑问或建议,欢迎在评论区留言交流。

    上一篇:Opencv视觉学习--创建三通道图像、将目标区域叠加在三通道图像上
    下一篇:Opencv视觉学习--读取、显示视频

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月24日 01时10分56秒