OpenCV核心内容100讲【第12讲】边缘检测基础:Canny算法

文摘   2025-01-11 00:00   天津  

边缘检测基础:Canny算法

边缘检测是计算机视觉中的一项基础而重要的处理技术,它能够帮助我们识别出图像中物体的轮廓。在众多边缘检测算法中,Canny算法因其高效性和准确性,在实际应用中非常受欢迎。本节我们将深入探索Canny边缘检测算法,并通过OpenCV-Python实现来加深理解。

1. Canny边缘检测算法概述

Canny边缘检测算法是由John Canny于1986年提出的,它是一种多阶段的算法,目的是提取图像中有用的结构信息,同时尽可能降低错误率。Canny算法的高效性主要体现在以下三个标准上:

  • 低误差率:标志着边缘检测必须尽可能精确地捕获图像中的边缘。
  • 高定位性:检测到的边缘点必须尽可能接近真实边缘的中心。
  • 最小响应:图像中的边缘只能被标记一次,并且可能存在的噪声不应产生误检。

2. Canny算法的具体步骤

Canny算法的执行流程可分为以下几个步骤:

2.1 噪声去除

由于边缘检测很容易受到图像中噪声的影响,首步是用高斯滤波器对图像进行平滑处理,去除噪声。

2.2 寻找图像梯度

使用Sobel算子计算水平和垂直方向上的梯度,从而找到图像中梯度的强度和方向。

2.3 非极大值抑制

将梯度值不是极大值的像素点设置为0,这样可以得到细化的边缘。

2.4 双阈值检测

确定两个阈值:低阈值和高阈值。强度高于高阈值的像素被认为是边缘像素,低于低阈值的被排除掉,位于两者之间的用一定的方法处理。

2.5 边缘跟踪

通过滞后技术从潜在的边缘像素中删除边缘,并确定哪些边缘是真正的边缘。

3. OpenCV中的Canny边缘检测

OpenCV提供了简单易用的Canny函数,只需指定低阈值和高阈值即可。让我们通过示例来看一下Canny算法在OpenCV中的应用。

import cv2
import numpy as np

image = cv2.imread('image.jpg'0)  # 以灰度模式读取图像
edges = cv2.Canny(image, 100200)  # 应用Canny边缘检测

cv2.imshow('Original Image', image)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,我们首先以灰度模式读取图像,然后使用Canny函数进行边缘检测,其中100和200分别是算法的低阈值和高阈值。最后,展示了原始图片和检测到的边缘图片。

例题

题目:给定一张包含简单图形的图像,使用Canny算法检测图像中的图形边缘。

解题步骤

  1. 读取图像并转化为灰度图像。
  2. 使用GaussianBlur进行去噪。
  3. 应用Canny边缘检测函数。
  4. 显示原图和结果图来对比。

通过以上步骤,可以有效地应用Canny算法进行边缘检测,并对检测结果进行验证。

边缘检测在图像处理和计算机视觉中占有非常重要的地位,Canny算法作为边缘检测的经典算法之一,不仅具有较高的检测效率,同时也能较好地保留图像边缘的细节信息。通过将Canny算法与其他算法结合使用,可以实现更加复杂的图像处理任务。

这里简单介绍了一些基本知识点,更细致的内容请参考:

  • 李立宗,OpenCV轻松入门(第2版),电子工业出版社,2023
  • 李立宗,计算机视觉40例(从入门到深度学习:OpenCV-Python),电子工业出版社,2022


在公众号【计算机视觉之光】回复 【OpenCV模拟试卷】获得《数字图像处理(OpenCV-Python》模拟试卷及参考答案。
在公众号【计算机视觉之光】回复 【Python试卷】获得《Python程序设计》模拟试卷及参考答案。

单击【阅读原文】参加OpenCV-Python课程学习。

在本公众号【计算机视觉之光】回复关键字“叮叮当当”获取更多的Python学习资料。




计算机视觉之光
电子工业出版社优秀作者,代表作《OpenCV轻松入门》,《计算机视觉40例》。
 最新文章