OpenCV中的轮廓检测cv2.findContours()
创始人
2024-12-28 12:37:21
0

文章目录

  • 前言
  • 一、查找轮廓
  • 二、绘制轮廓
  • 轮廓面积
  • 轮廓周长


前言

轮廓提取的前提,将背景置为黑色,目标为白色(利用二值化或Canny)

边缘检测,例如Canny等,利用梯度变化,记录图像中的边缘像素点,返回和源图片一样尺寸和类型的边缘图。

轮廓检测,则是将得到的每一个轮廓信息存储下来,记录的是轮廓之间和内部的信息。


一、查找轮廓

contours, hierarchy = cv2.findContours(image, mode, method) 

参数

  • Image:输入的二值图像,用于检测轮廓

mode:轮廓检索模式,决定函数如何检索和返回轮廓。

  • cv2.RETR_EXTERNAL:只检索最外层的轮廓。忽略轮廓内部的任何嵌套轮廓。
  • cv2.RETR_LIST:检索所有轮廓,但不建立轮廓之间的父子关系。所有的轮廓都被放置在同一个列表中,但彼此之间没有层级结构。
  • cv2.RETR_CCOMP:检索所有轮廓,并建立两层轮廓间的父子关系。外层轮廓是物体的外边界,内层轮廓是物体的内孔边界。如果内孔内还有另一个连通物体,这个物体的边界也会被检索出来,并作为外层的子轮廓。
  • cv2.RETR_TREE:检索所有轮廓,并建立完整的轮廓层级结构。这种模式下,轮廓之间的父子关系被完整地保存下来,形成一个树状结构。

method:轮廓近似方法,决定轮廓如何被表示和存储。不同的近似方法会影响轮廓的精度和所需的存储空间。

  • cv2.CHAIN_APPROX_NONE:存储所有的轮廓点。这是最高精度的表示方法,但会占用较多的存储空间。
  • cv2.CHAIN_APPROX_SIMPLE:仅存储轮廓的端点。这种方法会压缩水平方向、垂直方向和对角线方向上的轮廓点,只保留端点。例如,一个矩形轮廓只需存储四个角点即可。
    返回值
  • contours:一个 Python 列表,其中包含了图像中所有的轮廓。每个轮廓都是一个点集(NumPy 数组),表示轮廓上的所有点。
  • hierarchy:一个 NumPy 数组,包含了轮廓的层次结构信息。对于每个轮廓,它包含了四个值:[Next, Previous, First Child, Parent]。这个数组对于理解轮廓之间的关系非常有用。

二、绘制轮廓

mage = cv2.drawContours(image, contours, contourIdx, color, thickness) img = cv2.drawContours(img, contours, -1, (0, 255, 0), 2) 

参数

  • image:目标图像,轮廓将被绘制在这个图像上。
  • contours:要绘制的所有轮廓。
  • contourIdx:指定要绘制的轮廓索引。如果是 -1,则绘制所有轮廓。
  • color:轮廓的颜色。
  • thickness:轮廓线的厚度。

轮廓面积

cv2.contourArea(contour, oriented) area = cv2.contourArea(contours[0]) 
  • contour:这是一个轮廓的点集,通常通过 cv2.findContours() 函数获得。它是一个 NumPy 数组,其中包含了轮廓上所有点的坐标。
  • oriented(可选):这是一个布尔值参数。如果提供了这个参数,并且其值为 True,则函数返回的面积值将带有方向性,正数表示轮廓是逆时针方向,负数表示轮廓是顺时针方向。如果未提供此参数或参数值为 False(默认值),则函数返回的面积值为绝对值,即不考虑轮廓的方向。

轮廓周长

cv2.arcLength(curve, closed) length = cv2.arcLength(contours[0], True) 
  • curve:轮廓的点集,通过 cv2.findContours() 函数获得。是一个 NumPy 数组,其中包含了轮廓上所有点的坐标。
  • closed:布尔值参数,用于指定轮廓是否是闭合的。如果轮廓是闭合的(例如,一个完整的圆或正方形),则将此参数设置为 True。如果轮廓不是闭合的(例如,一条线段或圆弧的一部分),则将此参数设置为 False。

相关内容

热门资讯

三分钟了解!新八戒可以控制牌型... 三分钟了解!新八戒可以控制牌型,约局吧开挂,wepoke教程(最初真的是有挂);1、全新机制【新八戒...
第4分钟透视“wepoker可... 第4分钟透视“wepoker可以设置透视”pokemmo手机版脚本(新版开挂透视辅助攻略)1、wep...
一次性普及“樱花之盛能不能开挂... 一次性普及“樱花之盛能不能开挂”解谜作弊开挂辅助挂(素来真的是有挂)是一款可以让一直输的玩家,快速成...
2分钟细说!传送屋辅助器下载(... 2分钟细说!传送屋辅助器下载(辅助挂)可靠教程(切实作弊开挂辅助器)是一款可以让一直输的玩家,快速成...
第七分钟了解!多乐够级辅助软件... 第七分钟了解!多乐够级辅助软件,cloudpoker外挂,2025新版教程(固有存在有挂);1、让任...
第7分钟透视“wepoker私... 第7分钟透视“wepoker私人局辅助”哈糖大菠萝可以开挂(新版开挂透视辅助神器)1、游戏颠覆性的策...
4次性普及“雀友会免费自动挂机... 4次性普及“雀友会免费自动挂机脚本”讲解作弊开挂辅助app(竟然有挂);相信小伙伴都知道这个雀友会免...
科技新动态!牛总管辅助器(辅助... 科技新动态!牛总管辅助器(辅助挂)教你攻略(2026版作弊开挂辅助插件);1、不需要AI权限,帮助你...
3分钟透视“wepoker智能... 3分钟透视“wepoker智能辅助插件”aapoker脚本可以用(必备开挂透视辅助方法)1、很好的工...
9分钟了解!吉祥填大坑有插件,... 9分钟了解!吉祥填大坑有插件,wepoker脚本下载,微扑克教程(素来有挂),吉祥填大坑有插件是用手...