opencv基础学习与实战之轮廓分析与模板匹配(4)

在计算机视觉领域,轮廓检测与分析是目标识别、图像分割的核心技术之一。本文将通过具体案例,结合OpenCV库,详细讲解轮廓的几何特征计算(面积、周长)、轮廓筛选与排序,以及模板匹配的实战应用,帮助你快速掌握这些关键技术。


一、轮廓检测基础:从图像到轮廓

1.1 图像预处理

轮廓检测的第一步通常是将图像转换为灰度图并进行二值化处理,以便突出目标轮廓。以下是关键步骤:

import cv2

# 读取原始图像(手机图片示例)
phone = cv2.imread('phone.png')
# 转换为灰度图(减少计算量,保留亮度信息)
phone_gray = cv2.cvtColor(phone, cv2.COLOR_BGR2GRAY)
# 二值化处理(阈值120,大于阈值的像素设为255,否则0)
phone_bin = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)[-1]
  • cv2.cvtColor:颜色空间转换函数,COLOR_BGR2GRAY表示将BGR三通道转为单通道灰度图。
  • cv2.threshold:二值化函数,THRESH_BINARY模式会根据阈值将像素分为黑白两色。[-1]用于提取二值化后的图像(因threshold返回阈值和结果两个值)。

1.2 轮廓查找

通过cv2.findContours函数提取二值图像中的轮廓。该函数会遍历图像中的连通区域,返回轮廓列表。

# 查找轮廓(RETR_TREE表示树状结构检索所有轮廓,CHAIN_APPROX_NONE保存所有轮廓点)
contours = cv2.findContours(phone_bin, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[-2]
  • cv2.findContours:输入二值图像(需为单通道),输出轮廓列表。注意:OpenCV 3/4返回(轮廓, 层级),因此用[-2]取轮廓列表。
  • 参数说明RETR_TREE表示检索所有轮廓并重建嵌套结构;CHAIN_APPROX_NONE表示存储轮廓的所有顶点坐标。

二、轮廓的几何特征分析

轮廓检测后,我们常需要量化其几何特征(如面积、周长),用于筛选或分类目标。以下是两个核心指标的计算方法。

2.1 轮廓面积:cv2.contourArea

轮廓面积表示轮廓所围区域的像素数量,可用于判断轮廓的大小(如区分手机屏幕与小噪点)。

# 计算第0个轮廓的面积(默认返回绝对值)
area_0 = cv2.contourArea(contours[0])
print(f"轮廓0的面积: {
     
     area_0}")

# 计算第1个轮廓的面积
area_1 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值