《Opencv》Canny边缘检测操作

目录

一、简介

二、操作步骤

三、代码实例

四、代码解释

 五、参数调整

六、总结


一、简介

OpenCV 是一个广泛使用的计算机视觉库,提供了许多图像处理和计算机视觉算法。Canny 边缘检测是其中一种常用的边缘检测算法,由 John F. Canny 在 1986 年提出。Canny 边缘检测算法旨在找到图像中的边缘,并且具有以下特点:

  1. 低错误率:尽量减少误检和漏检。

  2. 定位精度高:检测到的边缘点应该尽可能接近真实边缘。

  3. 单一边缘响应:对于每个真实的边缘点,算法应该只返回一个点。

二、操作步骤

Canny 边缘检测算法通常包括以下几个步骤:

  1. 高斯滤波:平滑图像以减少噪声。

  2. 计算梯度:使用 Sobel 算子计算图像的梯度幅值和方向。

  3. 非极大值抑制:在梯度方向上进行非极大值抑制,以细化边缘。

  4. 双阈值检测:使用高低阈值来检测和连接边缘。

  5. 边缘连接:通过连接强边缘和弱边缘来形成完整的边缘。

三、代码实例

OpenCV 提供了 cv2.Canny() 函数来执行 Canny 边缘检测。以下是一个详细的示例代码,展示了如何使用 OpenCV 进行 Canny 边缘检测。

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 高斯滤波
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)

# Canny 边缘检测
edges = cv2.Canny(blurred_image, threshold1=100, threshold2=200)

# 显示结果
plt.figure(figsize=(10, 5))

plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')

plt.subplot(1, 2, 2)
plt.title('Canny Edges')
plt.imshow(edges, cmap='gray')

plt.show()

四、代码解释

  1. 读取图像

    image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
    • cv2.imread():读取图像文件。

    • cv2.IMREAD_GRAYSCALE:以灰度模式读取图像。

  2. 高斯滤波

    blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
    • cv2.GaussianBlur():使用高斯滤波器平滑图像,减少噪声。

    • (5, 5):高斯核的大小。

    • 0:标准差,设为 0 表示自动计算。

  3. Canny 边缘检测

    edges = cv2.Canny(blurred_image, threshold1=100, threshold2=200)
    • cv2.Canny():执行 Canny 边缘检测。

    • threshold1 和 threshold2:高低阈值,用于双阈值检测。

  4. 显示结果

    plt.figure(figsize=(10, 5))
    
    plt.subplot(1, 2, 1)
    plt.title('Original Image')
    plt.imshow(image, cmap='gray')
    
    plt.subplot(1, 2, 2)
    plt.title('Canny Edges')
    plt.imshow(edges, cmap='gray')
    
    plt.show()
    • plt.figure():创建一个新的图形。

    • plt.subplot():创建子图。

    • plt.imshow():显示图像。

    • plt.show():显示图形。

 五、参数调整

Canny 边缘检测的效果很大程度上取决于两个阈值参数 threshold1 和 threshold2。通常情况下,threshold2 是 threshold1 的两倍或三倍。你可以通过调整这两个参数来获得不同的边缘检测效果。

六、总结

 Canny 边缘检测是一种强大的边缘检测算法,能够有效地检测图像中的边缘。通过使用 OpenCV 的 cv2.Canny() 函数,你可以轻松地实现 Canny 边缘检测,并根据需要调整参数以获得最佳效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值