OpenCV中轮廓检测的实现与参数解析

目录

1.轮廓检测的原理和步骤 

2. 轮廓检测的参数和方法

3.轮廓绘制的参数和方法

4.代码示例


OpenCV是一个广泛应用于计算机视觉和图像处理领域的开源库,提供了丰富的功能和工具来处理图像数据。其中,轮廓检测是一项重要的技术,用于识别图像中的对象边界并进行进一步的分析和处理。本文将介绍OpenCV中轮廓检测和绘制的基本原理和方法。

1.轮廓检测的原理和步骤 

轮廓检测的原理是通过检测图像中灰度值变化较大的区域,找到目标的轮廓信息。

轮廓检测的步骤一般包括:将图像灰度化和二值化,以便区分目标和背景;使用轮廓提取函数,找到图像中所有的轮廓,返回轮廓的列表和层次结构;使用轮廓近似函数,对轮廓进行简化或平滑,去除不必要的点。轮廓检测的结果可以用于目标的定位、分割、识别等应用。

2. 轮廓检测的参数和方法

在OpenCV中,使用cv2.findContours()函数可以实现图像中的轮廓检测。

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

参数:
img:需要实现轮廓检测的原图
mode: 轮廓的检索模式,主要有四种方式:
   cv2.RETR_EXTERNAL:只检测外轮廓,所有子轮廓被忽略
   cv2.RETR_LIST:检测的轮廓不建立等级关系,所有轮廓属于同一等级
   cv2.RETR_CCOMP:返回所有的轮廓,只建立两个等级的轮廓。一个对象的外轮廓为第1级组织结构。
   cv2.RETR_TREE:返回所有的轮廓,建立一个完整的组织结构的轮廓。
method:轮廓的近似方法,主要有以下两种:
   cv2.CHAIN_APPROX_NONE:存储所有的轮廓点。
   cv2.CHAIN_APPROX_SIMPLE:压缩模式,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息。

3.轮廓绘制的参数和方法

cv2.drawContours(image, contours, contourIdx, color, thickness=None,lineType=None, hierarchy=None, maxLevel=None, offset=None)

image:要在其上绘制轮廓的输入图像。
contours:轮廓列表,通常由cv2.findContours()函数返回。
contourIdx:要绘制的轮廓的索引。如果为负数,则绘制所有轮廓。
color:轮廓的颜色,以BGR格式表示。例如,(0, 255, 0)表示绿色。
thickness:轮廓线的粗细。默认值为1。
lineType:轮廓线的类型。默认值为cv2.LINE_8。
hierarchy:轮廓层次结构。通常由cv2.findContours()函数返回。
maxLevel:绘制的最大轮廓层级。默认值为None,表示绘制所有层级。
offset:轮廓点的偏移量。默认值为None。

4.代码示例

import cv2
samu = cv2.imread('samu.jpg')#读取原图
cv2.imshow('samu',samu)
cv2.waitKey(100000)

samu_gray = cv2.cvtColor(samu,cv2.COLOR_BGR2GRAY)#灰度化处理
ret, samu_binary = cv2.threshold(samu_gray, 100, 150, cv2.THRESH_BINARY)#二值化处理
cv2.imshow('samu_binary',samu_binary)
cv2.waitKey(100000)

image, contours, hierarchy = cv2.findContours(samu_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)#轮廓检测

image_copy = samu.copy()#防止破坏原图
image_copy = cv2.drawContours(image=image_copy, contours=contours, contourIdx=-1,color=(0,255,0),thickness=1 )#绘制轮廓
cv2.imshow('Contours_show', image_copy)
cv2.waitKey(0)

原图: 

预处理:

轮廓框图: 

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值