• 机器学习进阶-图像梯度运算-Sobel算子 1. cv2.Sobel(使用Sobel算子进行计算) 2. cv2.convertScalerAbs(将像素点进行绝对值的计算)


    1.cv2.Sobel(src, ddepth, dx, dy, ksize)  进行sobel算子计算

    参数说明:src表示当前图片,ddepth表示图片深度,这里使用cv2.CV_64F使得结果可以是负值, dx表示x轴方向,dy表示y轴方向, ksize表示移动方框的大小

    2.cv2.convertScalerAbs(src)  将像素点进行绝对值计算

    参数说明: src表示当前图片

    sobel算子:分为x轴方向和y轴方向上的,x轴方向上的算子如图中的Gx,将sober算子在图中进行平移,当前位置的像素值等于sobel算子与(当前位置与周边位置8个点)进行对应位置相乘并相加操作,作为当前位置的像素点,y轴方向的算子如Gy, 对于x轴方向上,即左右两边的比较,

    计算方程为:x轴: p3 - p1 + 2 * p6 - 2 * p4 + p9 - p7, 右边的像素值减去左边的像素值

    代码:

    第一步:载入原始图片

    第二步:使用cv2.Sobel(src, cv2.CV_64F, 1, 0, ksize=3)  对x轴方向进行sobel算子相乘操作

    第三步:由于会出现负值的情况,因此使用cv2.convertScalerAbs() 转换为绝对值的形式

    第四步:计算y轴方向上的sobel算子

    第五步:使用cv2.addWeighted 将x轴方向的sobel算子的结果和y轴方向上的sobel算子的结果结合

    第六步:使用cv2.Sobel(src, cv2.CV_64F, 1, 1, ksize=3) 直接获得x轴和y轴方向上的sobel算子结合

    第七步:对这两个步骤获得的sobel算子作图

    import cv2
    import numpy as np
    
    # 第一步:加载图片
    img = cv2.imread('pie.png')
    cv2.imshow('original', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 第二步:对x轴方向上进行sobel算子相乘操作
    x_sobel = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
    cv2.imshow('x_sobel', x_sobel)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    画图时的负值,使用0来进行表示,因此右侧是黑色的

    # 第三步:因为右侧像素减去左边像素,存在负值的情况,因此使用cv2.convertScaleAbs取绝对值操作
    x_sobel = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
    x_sobel = cv2.convertScaleAbs(x_sobel)
    cv2.imshow('x_sobel', x_sobel)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 第四步:计算y轴的sobel算子
    y_sobel = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
    y_sobel = cv2.convertScaleAbs(y_sobel)
    cv2.imshow('y_sobel', y_sobel)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 第五步:并使用cv2.addweighted进行合并
    xy_sobel = cv2.addWeighted(x_sobel, 0.5, y_sobel, 0.5, 0)
    
    # 第六步: 直接使用cv2.sobel 进行计算
    xy_sobel_direct = cv2.Sobel(img, cv2.CV_64F, 1, 1, ksize=3)
    
    # 第七步:画图比较分步合并和一步到位的结果差异
    cv2.imshow('imgs', np.hstack((xy_sobel, xy_sobel_direct)))
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    从图中我们可以看出x和y轴各自求,再做合并比直接求得的结果,轮廓更加的明显

  • 相关阅读:
    入职一周
    Qt音视频开发49-通用截图截屏
    Qt音视频开发48-通用通道管理
    Qt音视频开发47-通用视频控件
    Qt音视频开发46-视频传输UDP版
    Qt音视频开发45-视频传输TCP版
    Qt音视频开发44-实时人脸框
    Qt音视频开发43-人脸识别服务端
    Qt音视频开发42-人脸识别客户端
    Qt音视频开发41-人脸识别嵌入式
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/10396780.html
Copyright © 2020-2023  润新知