opencv--图像轮廓的近似检测

本文介绍了图像轮廓近似检测的方法,包括读取和展示图片、图片处理、获取数据、调参和绘制简化轮廓的过程。它简化轮廓表示,提高处理效率,并能适应不同应用需求,兼容其他图像处理技术。

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

目录

什么是图像轮廓的近似检测?

具体实现

第一步(读取图片并展示):

第二步(图片处理):

第三步(获取数据):

第四步(调参):

第五步(绘制):

优点:


什么是图像轮廓的近似检测?

图像轮廓的近似检测是一种轮廓近似方法,用于将复杂的轮廓形状近似为另一种轮廓形状,该轮廓形状由更少的点组成,并且可以根据我们设定的准确度参数进行调整。

这种方法可以应用于诸如提取图像中的矩形等任务,在原始轮廓无法直接提取到完美矩形时尤其有用。

具体实现

首先介绍一下需要用到的参数

cv2.approxPolyDP(curve, epsilon, closed)

curve:输入轮廓。
epsilon:近似精度,即两个轮廓之间最大的欧式距离。该参数越小,得到的近似结果越接近实际轮廓;反之,得到的近似结果会更加粗略。
closed:布尔类型的参数,表示是否封闭轮廓。如果是 True,表示输入轮廓是封闭的,近似结果也会是封闭的;否则表示输入轮廓不是封闭的,近似结果也不会是封闭的。

第一步(读取图片并展示):

先将原图片读取并展示

import cv2

phone = cv2.imread('./phone.jpg')
phone = cv2.resize(phone, (700, 500))
cv2.imshow('phone', phone)
cv2.waitKey(0)

这里因为我的图片太大,所以用resize函数对图片进行了缩放

第二步(图片处理):

将图片转换为灰度图,并进行二值化处理

# 将图片转换成灰度图(方便更好识别)
phone_gray = cv2.cvtColor(phone, cv2.COLOR_BGR2GRAY)
# 二值化处理(黑白)
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)  # rec为阈值
# 展示图片
cv2.imshow('phone_binary', phone_binary)
cv2.waitKey(0)

成果:

第三步(获取数据):

获取数据对象

image, contours, hierarchy = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

image:返回处理的原图
contours:包含图像中所有轮廓的list对象。其中每一个独立的轮廓信息以边界点坐标(x,y)的形式储存在numpy数组中。
hierarchy:轮廓的层次结构。一个包含4个值的数组

cv2.RETR_TREE:返回所有的轮廓,建立一个完整的组织结构的轮廓。

cv2.CHAIN_APPROX_NONE:存储所有的轮廓点。

第四步(调参):

设置参数

epsilon = 0.01 * cv2.arcLength(contours[0], True)  # 设置近似精度
approx = cv2.approxPolyDP(contours[0], epsilon, True)  # 对轮廓进行近似

contours[index] :选取索引为index的轮廓

cv2.arctangle:得到这条轮廓的周长

第五步(绘制):

绘制图像

# 这里是对原图复制,这样就不会在原图上修改
phone_new = phone.copy()
# 这里第二个参数就使用上面定义好的参数,要用列表的形式
phone_new_draw = cv2.drawContours(phone_new, [approx], contourIdx=0, color=(0, 0, 255), thickness=3)  # 绘制轮廓
cv2.imshow('phone_new', phone_new_draw)
cv2.waitKey(0)

展示:

如果我们不做近似处理,得到的图像是这样的:

那为什么要对图像做近似处理呢?也就是说,近似处理的有什么好处

优点:

  1. 简化轮廓表示:通过使用更少的点来表示复杂的轮廓形状,可以大大降低轮廓表示的复杂性,同时保持轮廓的主要特征。
  2. 提高处理效率:由于使用了更简单的轮廓表示,因此在进行轮廓处理时可以大大提高计算效率。例如,在轮廓跟踪、轮廓分析和轮廓特征提取等任务中,使用近似轮廓可以更快地完成这些任务。
  3. 适应各种应用需求:轮廓近似方法可以灵活地调整其参数,以适应不同的应用需求。例如,在一些应用中,我们可能需要更精确的轮廓表示,而在另一些应用中,我们可能只需要一个大致的轮廓即可。通过调整轮廓近似方法的相关参数,可以得到满足不同需求的结果。
  4. 兼容其他技术:轮廓近似方法可以与其他图像处理技术相结合,以实现更复杂的图像处理任务。例如,我们可以在进行目标检测或特征识别等任务时,先使用轮廓近似方法提取目标的近似轮廓,然后再使用其他技术对目标进行进一步的分析和处理。

总的来说,图像轮廓的近似检测能够以较为简单和高效的方式处理复杂轮廓,同时保持轮廓的主要特征,适应各种应用需求,兼容其他技术,是一种非常实用的图像处理技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值