目录
什么是图像轮廓的近似检测?
图像轮廓的近似检测是一种轮廓近似方法,用于将复杂的轮廓形状近似为另一种轮廓形状,该轮廓形状由更少的点组成,并且可以根据我们设定的准确度参数进行调整。
这种方法可以应用于诸如提取图像中的矩形等任务,在原始轮廓无法直接提取到完美矩形时尤其有用。
具体实现
首先介绍一下需要用到的参数
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)
展示:
如果我们不做近似处理,得到的图像是这样的:
那为什么要对图像做近似处理呢?也就是说,近似处理的有什么好处
优点:
- 简化轮廓表示:通过使用更少的点来表示复杂的轮廓形状,可以大大降低轮廓表示的复杂性,同时保持轮廓的主要特征。
- 提高处理效率:由于使用了更简单的轮廓表示,因此在进行轮廓处理时可以大大提高计算效率。例如,在轮廓跟踪、轮廓分析和轮廓特征提取等任务中,使用近似轮廓可以更快地完成这些任务。
- 适应各种应用需求:轮廓近似方法可以灵活地调整其参数,以适应不同的应用需求。例如,在一些应用中,我们可能需要更精确的轮廓表示,而在另一些应用中,我们可能只需要一个大致的轮廓即可。通过调整轮廓近似方法的相关参数,可以得到满足不同需求的结果。
- 兼容其他技术:轮廓近似方法可以与其他图像处理技术相结合,以实现更复杂的图像处理任务。例如,我们可以在进行目标检测或特征识别等任务时,先使用轮廓近似方法提取目标的近似轮廓,然后再使用其他技术对目标进行进一步的分析和处理。
总的来说,图像轮廓的近似检测能够以较为简单和高效的方式处理复杂轮廓,同时保持轮廓的主要特征,适应各种应用需求,兼容其他技术,是一种非常实用的图像处理技术。