前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV 入门教程:轮廓特征和轮廓匹配

OpenCV 入门教程:轮廓特征和轮廓匹配

作者头像
小蓝枣
发布2023-07-10 16:11:02
2.6K0
发布2023-07-10 16:11:02
举报

OpenCV 入门教程:轮廓特征和轮廓匹配

导语

轮廓特征和轮廓匹配是图像处理中用于描述和比较轮廓的技术。通过提取轮廓的形状、面积、周长等特征,并进行比较和匹配,我们可以实现目标识别、形状分析等应用。在本文中,我们将以轮廓特征和轮廓匹配为中心,为你介绍使用 OpenCV 进行轮廓处理的基本步骤和实例。

😃😄 ❤️ ❤️ ❤️ ❤️ ❤️

一、轮廓特征

轮廓特征是指从轮廓中提取的描述性信息,用于对轮廓进行定量分析。以下是一些常见的轮廓特征:

1 面积( Area ):表示轮廓包围的区域的面积大小。 2 周长( Perimeter ):表示轮廓的边界长度。 3 边界框( Bounding Box ):表示能够完全包围轮廓的矩形框。 4 最小外接矩形( Minimum Enclosing Rectangle ):表示能够完全包围轮廓的最小矩形框。 5 最小外接圆( Minimum Enclosing Circle ):表示能够完全包围轮廓的最小圆。 6 中心点( Centroid ):表示轮廓的重心位置。

二、轮廓匹配

轮廓匹配是比较两个轮廓之间的相似度或差异度的技术。通过计算轮廓的形状、面积、周长等特征的差异,并进行比较,我们可以判断轮廓之间的相似性或不相似性。以下是一个使用轮廓匹配的示例代码:

代码语言:javascript
复制
import cv2

# 读取参考轮廓图像
reference_contour = cv2.imread('reference_contour.jpg', cv2.IMREAD_GRAYSCALE)

# 读取目标轮廓图像
target_contour = cv2.imread('target_contour.jpg', cv2.IMREAD_GRAYSCALE)

# 进行边缘检测
_, reference_edges = cv2.threshold(reference_contour, 127, 255, cv2.THRESH_BINARY)
_, target_edges = cv2.threshold(target_contour, 127, 255, cv2.THRESH_BINARY)

# 寻找轮廓
reference_contours, _ = cv2.findContours(reference_edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
target_contours, _ = cv2.findContours(target_edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 计算轮廓匹配
match = cv2.matchShapes(reference_contours[0], target_contours[0], cv2.CONTOURS_MATCH_I1)

在上述示例中,我们首先读取参考轮廓图像和目标轮廓图像,并通过边缘检测和轮廓寻找获取轮廓。然后,使用 matchShapes 函数计算轮廓之间的相似度。 CONTOURS_MATCH_I1 参数表示使用 I1 方法进行轮廓匹配。

三、示例应用

现在,我们来看一些常见的示例应用,演示轮廓特征和轮廓匹配的操作:

3.1 目标识别

使用轮廓特征和轮廓匹配可以实现目标识别,通过比较轮廓特征的相似度,判断是否存在目标对象。以下是一个示例代码:

代码语言:javascript
复制
import cv2

# 读取参考轮廓图像
reference_contour = cv2.imread('reference_contour.jpg', cv2.IMREAD_GRAYSCALE)

# 读取目标图像
target_image = cv2.imread('target_image.jpg')

# 进行边缘检测
_, reference_edges = cv2.threshold(reference_contour, 127, 255, cv2.THRESH_BINARY)
_, target_edges = cv2.threshold(target_image, 127, 255, cv2.THRESH_BINARY)

# 寻找轮廓
reference_contours, _ = cv2.findContours(reference_edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
target_contours, _ = cv2.findContours(target_edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 计算轮廓匹配
match = cv2.matchShapes(reference_contours[0], target_contours[0], cv2.CONTOURS_MATCH_I1)

# 判断目标是否存在
if match < 0.1:
    print("目标存在!")
else:
    print("目标不存在!")

这个示例将加载参考轮廓图像和目标图像,并通过边缘检测和轮廓匹配判断目标是否存在。

3.2 形状分析

使用轮廓特征可以进行形状分析,比如判断轮廓的形状类别或测量形状的尺寸。以下是一个示例代码:

代码语言:javascript
复制
import cv2

# 读取轮廓图像
contour_image = cv2.imread('contour_image.jpg', cv2.IMREAD_GRAYSCALE)

# 进行边缘检测
_, edges = cv2.threshold(contour_image, 127, 255, cv2.THRESH_BINARY)

# 寻找轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 计算轮廓特征
for contour in contours:
    area = cv2.contourArea(contour)  # 计算轮廓面积
    perimeter = cv2.arcLength(contour, True)  # 计算轮廓周长
    bounding_rect = cv2.boundingRect(contour)  # 计算轮廓的边界矩形
    min_enclosing_circle = cv2.minEnclosingCircle(contour)  # 计算包围轮廓的最小圆
    centroid = (int(min_enclosing_circle[0][0]), int(min_enclosing_circle[0][1]))  # 计算轮廓的质心坐标

    # 在图像上绘制轮廓特征
    cv2.drawContours(contour_image, [contour], -1, (0, 255, 0), 2)  # 绘制轮廓线
    cv2.rectangle(contour_image, bounding_rect, (0, 0, 255), 2)  # 绘制边界矩形
    cv2.circle(contour_image, centroid, 5, (255, 0, 0), -1)  # 绘制质心圆

    # 在图像上显示轮廓特征信息
    cv2.putText(contour_image, f"Area: {area}", (bounding_rect[0], bounding_rect[1] - 10),
                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)  # 显示面积信息
    cv2.putText(contour_image, f"Perimeter: {perimeter}", (bounding_rect[0], bounding_rect[1] + bounding_rect[3] + 20),
                cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0, 0, 255), 2)  # 显示周长信息

# 显示带有轮廓特征的图像
cv2.imshow("Contours", contour_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

这个示例将加载轮廓图像,并通过边缘检测和轮廓特征计算轮廓的面积、周长、边界框、最小外接圆等,并在图像上绘制和显示轮廓特征。

总结

通过本文的介绍,你已经了解了使用 OpenCV 进行轮廓特征提取和轮廓匹配的基本步骤。你学会了使用 findContours 函数寻找轮廓,并通过计算轮廓的形状、面积、周长等特征进行轮廓匹配和形状分析。

轮廓特征和轮廓匹配是图像处理中常用的技术,可以应用于目标识别、形状分析等多个领域。通过提取轮廓特征并比较轮廓之间的相似度,我们可以实现对图像中目标区域的定量分析和比较。

祝你在使用 OpenCV 进行轮廓特征和轮廓匹配的过程中取得成功!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OpenCV 入门教程:轮廓特征和轮廓匹配
  • 一、轮廓特征
  • 二、轮廓匹配
  • 三、示例应用
    • 3.1 目标识别
      • 3.2 形状分析
      • 总结
      相关产品与服务
      图像处理
      图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档