• OpenCV中的边缘检测技术及实现


    边缘检测是在电脑如何理解图片这一问题中的一环,它帮助电脑找出照片里的轮廓和分界线。想象一下你在看一幅黑白漫画,轮廓线定义了每一个角色和物体,而电脑要做的,就是通过边缘检测来找出这些线条。这在很多像是图像分析这样的领域里,尤其是在我们需要电脑识别和区分图片中不同物体时非常关键。OpenCV是一个功能强大的工具箱,它可以通过一些算法帮助我们实现边缘检测,这里我们会介绍两种常见的方法:Canny边缘检测和Sobel边缘检测。

    边缘检测

    接下来,让我们深入了解这两种方法的工作原理:

    1. Canny边缘检测

    Canny边缘检测算法是处理图像边缘获取最为著名的技术之一,它的名字就源自发明者John F. Canny。这个算法很聪明,它不只是简单地找边缘线,而是有一套完整的步骤来确保最后找到的边缘既清晰又准确。首先,它会用一种名叫高斯滤波的技术,像用软布擦拭镜头一样,平滑图片以减少杂乱的噪声点。接着,它就像用放大镜观察图像,来计算图片中每一点周围的变化程度,这有助于揭示出哪些地方是潜在的边缘。然后,Canny算法会用一个特殊的方法筛选这些潜在边缘,确保边缘线条尽可能细且明确。最后,它会类似于使用智能滤镜,通过设定两个门槛值来决定哪些边缘是真正值得保留的。在OpenCV里,你可以直接调用cv2.Canny()函数来使用这个算法。

    2. Sobel边缘检测:

    Sobel边缘检测算法则更像是数学家的工具,它依靠计算图像亮度变化的速度——或者说图像梯度,来识别边缘。想象你在骑车遇到一个坡度变化,坡的陡峭程度就像是图片亮度变化的速度。Sobel算子使用两个小的网格(3x3的卷积核)来分别测量图片中每一点水平方向和垂直方向的“坡度”。一种核心专注于发现垂直方向的边缘,另一种则发现水平方向的边缘。把这两种检测结果结合起来,就能得到一幅清晰显露出所有边缘的图像。在OpenCV中,这可以通过调用cv2.Sobel()函数来实现。

    程序实现:

    下面通过一个程序来演示边缘检测技术。

    python程序代码

    下面是使用Python和OpenCV实现Canny边缘检测和Sobel边缘检测的示例代码:

    # -*- coding: utf-8 -*-
    """
    Created on Fri Feb 16 21:44:22 2024
    
    @author: 李立宗
    
    公众号:计算机视觉之光
    
    知识星球:计算机视觉之光
    
    """
    
    import cv2
    import numpy as np
    
    # 读取图像
    image = cv2.imread('lena.bmp', 0)
    
    # Canny边缘检测
    canny_edges = cv2.Canny(image, 100, 200)
    
    # Sobel边缘检测
    sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
    sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
    sobel_edges = np.sqrt(sobel_x**2 + sobel_y**2).astype(np.uint8)
    
    # 显示原始图像和边缘检测结果
    cv2.imshow('Original Image', image)
    cv2.imshow('Canny Edges', canny_edges)
    cv2.imshow('Sobel Edges', sobel_edges)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    程序演示

    可以看到通过各种不同的边缘检测所获取的效果。
    在这里插入图片描述

    小结

    在这个示例中,我们读取了一张灰度图像,并分别使用Canny边缘检测和Sobel边缘检测算法进行了边缘检测。最后,将原始图像和边缘检测结果展示出来。

    结论:

    边缘检测是计算机视觉中重要的技术之一,用于识别图像中的边缘和轮廓。其中,Canny边缘检测和Sobel边缘检测是常用的方法,它们在OpenCV中都有相应的实现。本博客介绍了这两种方法的理论原理,并给出了使用OpenCV实现边缘检测的示例代码。希望通过本博客的学习,初学者可以对OpenCV中的边缘检测有一个清晰的了解,并将其应用于自己的项目中。

    相关知识点

    理解并实现OpenCV中的图像平滑技术

    参考文献

    1、OpenCV轻松入门
    李立宗,OpenCV轻松入门,电子工业出版社,2023
    在这里插入图片描述

    2、计算机视觉40例
    李立宗,计算机视觉40例,电子工业出版社,2022
    在这里插入图片描述

  • 相关阅读:
    数据分析三剑客-Matplotlib
    Vue---单向数据
    【机器学习基础】K-Means聚类算法
    ChatGPT AIGC 非常实用的AI工具集合大全
    Jmeter全流程性能测试实战
    css 样式实战
    个人做量化交易一定不靠谱?
    什么是 游戏引擎 ?各个主流引擎的区别
    13.练习题(年月日,打字游戏)
    中小企业成本的会计核算方法
  • 原文地址:https://blog.csdn.net/superdont/article/details/136132826