OpenCV-Python——图像轮廓

本文介绍了OpenCV中图像轮廓的概念及其在形状分析和物体检测中的应用。首先,详细阐述了如何通过二值化图像和阈值化处理找到轮廓,包括四种轮廓检索模式(RETR_EXTERNAL、RETR_LIST、RETR_CCOMP、RETR_TREE)以及轮廓的近似方法(CHAIN_APPROX_NONE、CHAIN_APPROX_SIMPLE等)。接着,讨论了`cv2.findContours()`函数的使用方法,并解释了返回的contours和hierarchy变量的含义。最后,介绍了如何使用`cv2.drawContours()`函数绘制轮廓,包括参数的设置和意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 什么是轮廓

轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。

为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理 或者 Canny 边界检测。
查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图 像的话,你应该将原始图像存储到其他变量中。
在 OpenCV 中,查找轮廓就像在黑色背景中超白色物体。你应该记住, 要找的物体应该是白色而背景应该是黑色。
让我们看看如何在一个二值图像中查找轮廓:

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy

@param image Source, an 8-bit single-channel image.
@param contours Detected contours. Each contour is stored as a vector of points.
@param hierarchy Optional output vector
@param mode Contour retrieval mode, see #RetrievalModes
@param method Contour approximation method, see #ContourApproximationModes
@param offset Optional offset by which every contour point is shifted. 
  • image:输入图像,单通道,可以是灰度图,但更常用二值图
  • mode:定义轮廓的检索模式,共四种,可参考https://blog.csdn.net/yukinoai/article/details/87900420

RETR_EXTERNAL:只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略

RETR_LIST:检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立, 没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓, 所以hierarchy向量内所有元素的第3、第4个分量都会被置为-1

RETR_CCOMP:检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层, 若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层。 两个等级关系:顶层为连通域的外围边界,次层为孔的内层边界。

RETR_TREE:检测所有轮廓,所有轮廓建立一个等级树结构。 外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。

  • method:定义轮廓的近似方法
    method如果被设置为 cv2.CHAIN_APPROX_NONE,所有的边界点都会被存储。但是我们真的需要这么多点吗?例如,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值