• opencv-图像梯度


    目标
    • 图像梯度,图像边界等
    • 使用到的函数有:cv2.Sobel(),cv2.Schar(),cv2.Laplacian() 等
    原理
    梯度简单来说就是求导。
    OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和 Laplacian。我们会意义介绍他们。
    Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化。Laplacian 是求二阶导数。

    1.Sobel 算子和 Scharr 算子

    Sobel 算子是高斯平滑与微分操作的结合体,所以它的抗噪声能力很好。 你可以设定求导的方向(xorder 或
    yorder)。还可以设定使用的卷积核的大 小(ksize)。

    import cv2
    import numpy as np
    # 读取灰度图像
    img = cv2.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg", cv2.IMREAD_GRAYSCALE)
    # 计算水平方向的Sobel梯度
    sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
    # 计算垂直方向的Sobel梯度
    sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
    # 显示原始图像和Sobel梯度图像
    cv2.imshow('Original Image', img)
    cv2.imshow('Sobel X', sobelx)
    cv2.imshow('Sobel Y', sobely)
    # 等待用户按下任意键
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    图像梯度是图像中灰度变化的一种度量,通常用于检测图像中的边缘或者区域的变化。在图像处理中,常用的梯度计算方法包括Sobel、Scharr、Laplacian等。

    Sobel算子:

    Sobel算子是一种常用的梯度计算方法,分为水平和垂直两个方向。在OpenCV中,cv2.Sobel() 函数用于计算图像的Sobel梯度。

    基本语法如下:

    sobelx = cv2.Sobel(src, ddepth, dx, dy, ksize[, dst[, scale[, delta[, borderType]]]])
    
    • 1
    • src: 输入图像。
    • ddepth: 输出图像的深度,通常使用 -1 表示与输入图像相同。
    • dxdy: 分别表示水平和垂直方向的梯度阶数。
    • ksize: Sobel核的大小,通常为1、3、5等奇数。
    • dst(可选): 输出图像。
    • scale(可选): 缩放因子,通常为1。
    • delta(可选): 一个可选的增量,将被加到输出。
    • borderType(可选): 边界处理的方式,通常为默认值 cv2.BORDER_DEFAULT
    1. Laplacian算子:

    Laplacian算子用于计算图像的二阶导数,从而得到图像的梯度。在OpenCV中,cv2.Laplacian() 函数用于计算Laplacian梯度。

    基本语法如下:

    laplacian = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
    
    • 1

    参数说明与Sobel类似,其中 ksize 表示Laplacian核的大小。

    import cv2
    import numpy as np
    # 读取灰度图像
    img = cv2.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg", cv2.IMREAD_GRAYSCALE)
    # 计算Laplacian梯度
    laplacian = cv2.Laplacian(img, cv2.CV_64F)
    
    # 显示原始图像和Laplacian梯度图像
    cv2.imshow('Original Image', img)
    cv2.imshow('Laplacian', laplacian)
    
    # 等待用户按下任意键
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    这些梯度计算方法可以帮助检测图像中的边缘和区域变化,对于后续的图像分析和处理非常有用。

  • 相关阅读:
    软件测试工作的目的和原则是什么?
    MAC系统和Linux系统下md5获取方法
    钱扣了,订单却是未支付,用户炸了——聊聊如何防止支付掉单
    解析ZooKeeper源码中的Leader选举
    英语——分享篇——每日100词——801-900
    【外设】拓展坞接入外设一直弹窗报错问题
    国家网络安全周 | 金融日,一起 get金融行业数据安全
    vue中如何导出doc文档
    基于蚁群算法的时延Petri网(ACOTPN)路径规划算法(Matlab代码实现)
    漏洞复现 - - -Struts2(s2-045)远程命令执行漏洞
  • 原文地址:https://blog.csdn.net/weixin_42367888/article/details/134546300