Python + OpenCV 学习笔记(十一)>>> 图像梯度

版权声明:如需转载请标注 https://blog.csdn.net/weixin_40973138/article/details/88707761

具体请参考Sobel 导数
拉普拉斯梯度

import cv2 as cv


def sobel_gradient(image):
        src = cv.imread(image)
        #grad_x = cv.Sobel(src, cv.CV_32F, 1, 0)
        #grad_y = cv.Sobel(src, cv.CV_32F, 0, 1)
        grad_x = cv.Scharr(src, cv.CV_32F, 1, 0)
        grad_y = cv.Scharr(src, cv.CV_32F, 0, 1)

        gradx = cv.convertScaleAbs(grad_x)
        grady = cv.convertScaleAbs(grad_y)
        gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)
        #cv.imshow('gradx', gradx)
        #cv.imshow('grady', grady)
        cv.imshow('customary', src)
        cv.imshow('gradxy', gradxy)


sobel_gradient('/home/pi/Desktop/apple.jpg')
cv.waitKey(0)
cv.destroyAllWindows()

(其中gradx 和grady 也是可输出图像,为图像分别在x,y 方向上的梯度图像)
在此实际运用为Scharr 算子,注释内为Sobel 算子
在这里插入图片描述


拉普拉斯梯度:

def laplacian_gradient(image):
        src = cv.imread(image)
        dst = cv.Laplacian(src, cv.CV_32F)
        lpls = cv.convertScaleAbs(dst)
        cv.imshow('customary', src)
        cv.imshow('lpls', lpls)

在这里插入图片描述

除此之外,我们还可自定义算子进行梯度计算

def custom_gradient(image):
        src = cv.imread(image)
        kernel = np.array([[1,1,1], [1,-8,1], [1,1,1]])
        dst = cv.filter2D(src, cv.CV_32F, kernel=kernel)
        result = cv.convertScaleAbs(dst)
        cv.imshow('customary', src)
        cv.imshow('result', result)

在这里插入图片描述
并且从试验得知,拉普拉斯算子是:
[0, 1, 0]
[1,-4, 1]
[0, 1, 0]

猜你喜欢

转载自blog.csdn.net/weixin_40973138/article/details/88707761
今日推荐