• OpenCV自学笔记十三:图像梯度


    目录

    1、Sobel算子及函数使用

    2、Scharr算子及函数使用

    3、Lapiacian算子及函数使用


    1、Sobel算子及函数使用

    Sobel算子是一种常用于图像边缘检测的算法,它利用了图像中像素灰度值的变化来寻找边缘。在OpenCV中,可以使用函数cv2.Sobel()来实现Sobel算子的功能。

    下面是一个示例代码,展示了如何使用Sobel算子进行图像边缘检测:

    1. import cv2
    2. import numpy as np
    3. # 读取图像
    4. img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
    5. # 对图像应用Sobel算子
    6. sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
    7. sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
    8. # 将结果转换为无符号8位整型
    9. sobelx = cv2.convertScaleAbs(sobelx)
    10. sobely = cv2.convertScaleAbs(sobely)
    11. # 合并x和y方向的梯度
    12. gradient = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)
    13. # 显示结果
    14. cv2.imshow("Sobel", gradient)
    15. cv2.waitKey(0)
    16. cv2.destroyAllWindows()

    在这个示例中,我们首先读取一张灰度图像,然后分别应用Sobel算子的x和y方向的核,通过`cv2.Sobel()`函数实现。第二个参数`cv2.CV_64F`指定了输出图像的深度。ksize参数指定了Sobel算子的大小,这里设为3表示使用3x3的核。

    最后,我们将x和y方向的梯度图像合并起来,并通过`cv2.addWeighted()`函数进行加权融合。最后,将结果通过`cv2.imshow()`显示出来。

    需要注意的是,Sobel算子对噪声比较敏感,所以在应用之前,可以先对图像进行平滑处理,例如使用高斯模糊 (`cv2.GaussianBlur()`) 函数。

    2、Scharr算子及函数使用

    Scharr算子是一种常用于图像边缘检测的算法,它与Sobel算子类似,但具有更好的性能。在OpenCV中,可以使用函数cv2.Scharr()来实现Scharr算子的功能。

    下面是一个示例代码,展示了如何使用Scharr算子进行图像边缘检测:

    1. import cv2
    2. import numpy as np
    3. # 读取图像
    4. img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
    5. # 对图像应用Scharr算子
    6. scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0)
    7. scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
    8. # 将结果转换为无符号8位整型
    9. scharrx = cv2.convertScaleAbs(scharrx)
    10. scharry = cv2.convertScaleAbs(scharry)
    11. # 合并x和y方向的梯度
    12. gradient = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0)
    13. # 显示结果
    14. cv2.imshow("Scharr", gradient)
    15. cv2.waitKey(0)
    16. cv2.destroyAllWindows()

    在这个示例中,我们首先读取一张灰度图像,然后分别应用Scharr算子的x和y方向的核,通过`cv2.Scharr()`函数实现。第二个参数`cv2.CV_64F`指定了输出图像的深度。

    接着,将x和y方向的梯度图像通过`cv2.convertScaleAbs()`函数转换为无符号8位整型。

    最后,将x和y方向的梯度图像合并起来,并通过`cv2.addWeighted()`函数进行加权融合。最后,将结果通过`cv2.imshow()`显示出来。

    与Sobel算子类似,Scharr算子也对噪声比较敏感,所以在应用之前,可以先对图像进行平滑处理,例如使用高斯模糊 (`cv2.GaussianBlur()`) 函数。

    3、Lapiacian算子及函数使用

    Laplacian(拉普拉斯)算子是一种常用于图像边缘检测的算法,它可以提取图像中的二阶导数信息,从而寻找图像中的边缘。在OpenCV中,可以使用函数cv2.Laplacian()来实现Laplacian算子的功能。下面是一个示例代码,展示了如何使用Laplacian算子进行图像边缘检测:

    1. import cv2
    2. import numpy as np
    3. # 读取图像
    4. img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
    5. # 对图像应用Laplacian算子
    6. laplacian = cv2.Laplacian(img, cv2.CV_64F)
    7. # 将结果转换为无符号8位整型
    8. laplacian = cv2.convertScaleAbs(laplacian)
    9. # 显示结果
    10. cv2.imshow("Laplacian", laplacian)
    11. cv2.waitKey(0)
    12. cv2.destroyAllWindows()

    在这个示例中,我们首先读取了一张灰度图像,然后应用Laplacian算子,通过`cv2.Laplacian()`函数实现。第二个参数`cv2.CV_64F`指定了输出图像的深度。

    接下来,将Laplacian算子的结果通过`cv2.convertScaleAbs()`函数转换为无符号8位整型。

    最后,使用`cv2.imshow()`显示结果。

    需要注意的是,Laplacian算子对噪声比较敏感,因此在应用之前,可以先对图像进行平滑处理,例如使用高斯模糊(`cv2.GaussianBlur()`)函数。

  • 相关阅读:
    找不到msvcr120.dll无法执行代码的全套解决方案
    功能:crypto-js加密解密
    基于Java+Springmvc+vue+element实现高校心理健康系统详细设计和实现
    防火墙技术基础篇:认识安全策略、安全区域、域间转发及报文转发流程
    Flink提交任务
    HTTP代理SSL连接:保障网络安全的重要协议
    【代码收藏夹】Python实现PID算法
    【完整解题】2023年第四届MathorCup高校数学建模挑战赛——大数据竞赛B题 思路代码文章电商零售商家需求预测及库存优化问题
    大数据之-Flink学习笔记
    设计模式-工厂方法模式
  • 原文地址:https://blog.csdn.net/m0_71721954/article/details/133142915