OpenCV-Python 轮廓检测

本文介绍了在OpenCV-Python中如何使用findContours进行轮廓检测,并结合drawContours函数显示检测结果。轮廓是图像分析的重要工具,findContours函数提供不同的模式和方法来提取轮廓,而drawContours用于在图像上描绘这些轮廓。通过实例展示了这两个函数的用法。

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

轮廓,可以理解为图像中具有相同颜色或密度的位于边界的连续点的集合,轮廓是形状分析和对象识别的有利工具。
在OpenCV-Python中,常用findContours函数来进行轮廓检测,后使用drawContours函数在图像中显示出检测到的轮廓,每个独立的轮廓是以Numpy array的点坐标的形式呈现,两个函数通常互相结合使用。

轮廓检测函数findContours

从黑色背景中获取白色区域的轮廓

  • 函数原型:
contours, hierarchy=cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
  • 参数:
  1. image: 源图像,必须为8位单通道图像,非零像素值均按像素值为1处理,0像素保留其像素值,该函数在提取轮廓过程中会改变图像,加载图像后会自动转化为二值图像。

  2. mode: 轮廓检索模式
    cv2.RETR_EXTERNAL
    只检测最外层轮廓,并置hierarchy[i][2] = hierarchy[i][3] = -1
    cv2.RETR_LIST
    提取所有轮廓并记录在列表中,轮廓之间无等级关系
    cv2.RETR_CCOMP

### OpenCV-Python 轮廓检测教程 轮廓检测计算机视觉领域的重要技术之一,广泛应用于对象检测、边缘检测以及形状分析等领域。以下是基于 OpenCV-Python轮廓检测示例代码及其说明。 #### 示例代码 以下是一个完整的 Python 代码示例,展示如何使用 `cv2.findContours()` 和 `cv2.drawContours()` 函数进行轮廓检测并将其绘制在图像上: ```python import cv2 import numpy as np # 加载原始图像 image = cv2.imread('example.jpg') # 将图像转换为灰度图 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用高斯模糊减少噪声(可选) blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0) # 应用 Canny 边缘检测算法生成二值化图像 edges = cv2.Canny(blurred_image, threshold1=30, threshold2=100) # 查找轮廓 contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 创建一个新的空白图像用于绘制轮廓 blank_image = np.zeros_like(image) # 绘制轮廓 cv2.drawContours(blank_image, contours, -1, (0, 255, 0), 2) # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Edges', edges) cv2.imshow('Detected Contours', blank_image) # 等待按键关闭窗口 cv2.waitKey(0) cv2.destroyAllWindows() ``` --- #### 代码解释 1. **加载图像**: 首先通过 `cv2.imread()` 方法加载输入图像。 2. **灰度转换**: 使用 `cv2.cvtColor()` 将彩色图像转换为灰度图像[^1]。 3. **降噪处理**: 可选地应用高斯滤波器 (`cv2.GaussianBlur`) 来平滑图像,从而降低噪声的影响。 4. **边缘检测**: 利用 Canny 边缘检测算法 (`cv2.Canny`) 获取二值化的边缘图像[^5]。 5. **查找轮廓**: 借助 `cv2.findContours` 函数提取图像中的轮廓信息[^4]。 6. **绘制轮廓**: 使用 `cv2.drawContours` 将找到的轮廓绘制到新创建的空白图像上[^2]。 7. **显示结果**: 最终通过 `cv2.imshow` 展示原图、边缘图和检测后的轮廓图。 --- #### 关键点解析 - **参数设置**: - `cv2.RETR_EXTERNAL`: 表示只检索最外层的轮廓- `cv2.CHAIN_APPROX_SIMPLE`: 对轮廓进行压缩,仅保留端点坐标。 - **颜色空间转换**: 如果需要将 BGR 图像转换为 RGB 格式以便于其他库(如 Matplotlib)使用,则可以通过 NumPy 实现快速的颜色通道反转:`img_RGB = img_BGRA[:, :, ::-1]`[^3]。 - **注意事项**: - 输入给 `cv2.findContours` 的图像必须是二值图形式,因此需提前完成灰度化与阈值分割操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值