OpenCV基础操作-Sobel算子


Sobel算子

Sobel算子的通俗解释

当我们处理图像时,我们通常关注图像中的边缘,因为边缘可以提供物体的形状和结构信息。而Sobel算子就是一种常用的方法,用于检测图像中的边缘。

可以把Sobel算子看作是一种特殊的滤波器,用于计算图像中每个像素点的梯度信息。梯度反映了像素值的变化率,而边缘通常对应着像素值的剧烈变化。

Sobel算子主要通过两个方向(水平和垂直)的梯度来检测图像中的边缘。它在图像上滑动一个特定大小的窗口,在每个窗口内部计算水平或垂直方向上的梯度值。然后,通过组合这两个方向上的梯度值,我们可以找到图像中的边缘。

在实际应用中,我们通常会使用Sobel算子生成两个梯度图像:一个是水平方向的梯度图像,另一个是垂直方向的梯度图像。通过对这两个梯度图像进行适当的处理(例如加权求和),可以得到最终的边缘图像。

边缘图像显示了图像中边缘的位置和强度。边缘的强度取决于像素值的变化率以及Sobel算子的参数设置。通过调整参数和进一步处理边缘图像,我们可以获得更准确的边缘信息,并在图像处理任务中使用这些边缘,例如对象检测、图像分割等。

因此,Sobel算子提供了一种方便和简单的方法,用于检测图像中的边缘,并在计算机视觉和图像处理领域中得到了广泛应用。

Sobel算子的标准范式

    # 计算x和y方向上的梯度
    sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
    sobel_x = cv2.convertScaleAbs(sobel_x)
    sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
    sobel_x = cv2.convertScaleAbs(sobel_y)
  • cv2.CV_64F:输出图像的深度,这是一个可选参数。在这里,我们指定输出图像的深度为 64 位浮点数。这将允许我们在计算梯度时保留较大的范围和精度。
  • cv2.convertScaleAbs()~绝对值转换:将梯度值转换为绝对值是为了保留边缘信息的正数部分,以便更好地表达边缘的强度。在Sobel算子计算中,得到的梯度值可以是正数或负数。负数梯度值表示边缘的变化是向下或向左的,而正数梯度值表示边缘的变化是向上或向右的。但实际上,对于边缘检测任务,我们只关心边缘的存在与否以及其强度大小,而不关心边缘的具体方向。

Sobel算子测试样例

if __name__ == '__main__':
    img_path_3 = 'yuelian.png'
    # 读取图像
    image = cv2.imread(img_path_3, cv2.IMREAD_GRAYSCALE)
    image = cv2.resize(image, (512, 512))

    # 计算x和y方向上的梯度
    sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
    sobel_x = cv2.convertScaleAbs(sobel_x)
    sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
    sobel_x = cv2.convertScaleAbs(sobel_y)
    img_show('==', image)
    img_show('==', sobel_x)
    img_show('==', sobel_y)
    # 将梯度图像合并为一个综合的边缘图像
    sobel_combined = cv2.addWeighted(sobel_x.astype(np.uint8), 0.5, sobel_y.astype(np.uint8), 0.5, 0)
    # 显示原始图像和边缘检测结果
    img_show('--', sobel_combined)

原始输入:
在这里插入图片描述
计算X轴上面的Sobel算子结果:
在这里插入图片描述

计算y轴上面Sobel算子结果:

在这里插入图片描述
加权合并结果:

真实测试用例

在这里插入图片描述


欢迎大家学习交流

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值