16、图像梯度
2019-01-06 本文已影响0人
BigBigGuy
一阶导数与Soble算子


def sobel_function(image):
grad_x = cv.Sobel(image, cv.CV_32F, dx=1, dy=0)
grad_y = cv.Sobel(image, cv.CV_32F, dx=0, dy=1)
'''
cv.convertScaleAbs:
先绝对值,然后转为单通道 8 位的范围
'''
gradx = cv.convertScaleAbs(grad_x)
grady = cv.convertScaleAbs(grad_y)
cv.imshow("gradient-x", gradx)
cv.imshow("gradient-y", grady)
gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)
cv.imshow("gradient-xy", gradxy)

grad_x = cv.Scharr(image, cv.CV_32F, dx=1, dy=0)
grad_y = cv.Scharr(image, cv.CV_32F, dx=0, dy=1)

二阶导数与拉普拉斯算子


def laplacian_function(image):
'''
默认拉普拉斯算子是第一个矩阵
'''
dst = cv.Laplacian(image, cv.CV_32F)
lpls = cv.convertScaleAbs(dst)
cv.imshow("Laplacian", lpls)

def laplacian_function(image):
# dst = cv.Laplacian(image, cv.CV_32F)
kernel = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])
dst = cv.filter2D(image, cv.CV_32F, kernel=kernel)
lpls = cv.convertScaleAbs(dst)
cv.imshow("Laplacian", lpls)
