
Opencv视觉学习--findContours()轮廓提取
image:输入图像,必须为单通道图像。可以使用相应的函数将图像转换为二值图像。 contours:存储检测到的轮廓,每个轮廓以点向量形式表示。 hierarchy:可选的输出向量,包含图像的拓扑信息。这一参数对分析轮廓数量和结构有重要作用。 mode:轮廓检索模式,常用的有: method:轮廓近似方法。常用的有: offset:轮廓点的偏移量,默认为 图像必须是单通道图像:这是findContours函数的一个重要前提条件。可以通过 轮廓太过复杂或不完整:根据需求调整 hierarchy参数如何解读:每个hierarchy元素包含4个值,依次表示后继轮廓、前驱轮廓、父轮廓和嵌套级别。如果没有对应的轮廓,设置为-1。
发布日期: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的基础操作是必不可少的。下面是一些常用工具函数建议:
- 二值化图像:使用
threshold
、adaptiveThreshold
或Canny
将图像转换为二值图像。 - 图像处理:可以使用
compare
、inRange
等函数进行图像均衡、降噪等处理。
findContours函数基本用法
findContours函数的主要功能是从二值图像中检测出所有轮廓。函数接口如下:
void cv::findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point())
参数说明
- RETR_EXTERNAL:仅检测最外层轮廓。
- RETR_LIST:提取所有轮廓但不建立等级关系。
- RETR_CCOMP:将轮廓组织为双层结构。
- RETR_TREE:提取所有轮廓并重新建立复杂的轮廓结构。
- CHAIN_APPROX_NONE:获取每个轮廓的每个像素。
- CHAIN_APPROX_SIMPLE:压缩水平和垂直方向的坐标点。
- CHAIN_APPROX_TC89_L1和CHAIN_APPROX_TC89_KCOS:使用Teh-Chinl链逼近算法进行轮廓近似。
Point()
。在分析区域内轮廓时非常实用。具体使用步骤
以下是一个完整的轮廓检测流程示例:
vector> contours;vector hierarchy;findContours(bin_img, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
返回值分析
- contours:存储了所有检测到的轮廓。每个轮廓包含多个点,点的顺序决定了轮廓的形状。
- hierarchy:如果选择RETR_TREE模式,每个轮廓都包含其父轮廓和子轮廓信息。这些信息对于图像的分割和分析具有重要意义。
常见问题解答
cv::cvtColor
将颜色图像转换为灰度图像。method
参数,选择合适的轮廓近似方法。实际应用案例
通过以上方法,你可以轻松实现各种图像分析任务。例如:
- 人脸识别:提取人脸轮廓进行特征提取。
- 物体检测:识别图像中的主要对象轮廓。
- 文字检测:提取文字轮廓并用于字符识别。
通过以上技术,你已经掌握了OpenCV中findContours函数的核心运用方法。可以根据实际需求进行代码修改和优化,开拓你的图像处理世界!如有任何疑问或建议,欢迎在评论区留言交流。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月24日 01时10分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Struts2-从值栈获取list集合数据(三种方式)
2019-03-08
参考图像
2019-03-09
设计模式(18)——中介者模式
2019-03-09
推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
2019-03-09
【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
2019-03-09
一文理解设计模式--命令模式(Command)
2019-03-09
VTK:可视化之RandomProbe
2019-03-09
block多队列分析 - 2. block多队列的初始化
2019-03-09
Java时间
2019-03-09
不编译只打包system或者vendor image命令
2019-03-09
【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
2019-03-09
flink启动(二)
2019-03-09
pair的用法
2019-03-09
Flex 布局的自适应子项内容过长导致其被撑大问题
2019-03-09
PL/SQL 动态Sql拼接where条件
2019-03-09
【换行符】什么时候用cin.get()吃掉输入流中的换行符
2019-03-09
广东外语外贸大学第三届网络安全大赛Writeup
2019-03-09
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
2019-03-10