OpenCV-Python图像梯度 Sobel算子

图像的梯度计算的是图像变化的速度,对于边缘部分呢灰度值变换大,梯度值也大,相反则灰度值变化小,梯度值小

Sobel算子是一种离散的微分算子,该算子结合了高斯平滑处理和微分求导运算。 该算子利用局部差寻找边缘
在这里插入图片描述
将Sobel算子Gx和原始图像卷积可以得到水平方向的像素值变化,与Gy卷积的到垂直方向的像素值变化。
在这里插入图片描述
将sober算子在图中进行平移,当前位置的像素值等于sobel算子与(当前位置与周边位置8个点)进行对应位置相乘并相加操作,作为当前位置的像素点。
如果要计算P5的水平方向,则需要Sobel算子及P5邻域点

公式为:P5x轴 = P3 - P1 + 2 * P6 - 2* P4 + P9 - P7

用P5右侧的像素点减左侧的像素点,因为P4和P6离P5较近,所以权值为2,其他为1垂直方向类似,垂直是下减上。

import cv2
import matplotlib.pyplot as plt
import numpy as np
def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()

def Sobel():
    img = cv2.imread('images/pie.png', cv2.IMREAD_GRAYSCALE)
    cv2.imshow("img", img)
    
    # 使用cv2.Sobel(src, cv2.CV_64F, 1, 0, ksize=3)  对x轴方向进行sobel算子相乘操作
    sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
    # 由于会出现负值的情况,因此使用cv2.convertScalerAbs() 转换为绝对值的形式
    sobelx = cv2.convertScaleAbs(sobelx)
    cv_show(sobelx, 'sobelx')
    
	# 计算y轴方向上的sobel算子
    sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
    sobely = cv2.convertScaleAbs(sobely)
	cv_show(sobely, 'sobely')
	 
	# 使用cv2.addWeighted 将x轴方向的sobel算子的结果和y轴方向上的sobel算子的结果结合
    sobelxy = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)
    cv_show(sobelxy, 'sobelxy')

    

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值