liutianrui1

原理:https://blog.csdn.net/songzitea/article/details/17528089?utm_source=blogxgwz8 

 

 

注意,sobel算子和laplace算子加和均为0!

 代码如下:

import numpy as np
import cv2 as cv

def sobel_demo(image):
#CV_8U的取值范围为[0,255]
#此处ddepth经过加减,范围已经超过CV_8U,所以取CV_32F
#dx=1,dy=0,先求dx方向
grad_x = cv.Sobel(image, cv.CV_32F, 1, 0)
grad_y = cv.Sobel(image, cv.CV_32F, 0, 1)
#边缘地方,差值有正有负
gradx=cv.convertScaleAbs(grad_x)#求出来的结果有正有负,最后转到8u上去
grady = cv.convertScaleAbs(grad_y)
cv.imshow(\'grad_x\',gradx)
cv.imshow(\'grad_y\', grady)
gradxy=cv.addWeighted(gradx,0.5,grady,0.5,0)
cv.imshow(\'gradient\',gradxy)

def scharr_demo(image):
\'\'\'Scharr算子是sobel算子的增强版本,但是对噪声敏感\'\'\'
#CV_8U的取值范围为[0,255]
#此处ddepth经过加减,范围已经超过CV_8U,所以取CV_32F
#dx=1,dy=0,先求dx方向
grad_x = cv.Scharr(image, cv.CV_32F, 1, 0)
grad_y = cv.Scharr(image, cv.CV_32F, 0, 1)
#边缘地方,差值有正有负
gradx=cv.convertScaleAbs(grad_x)#求出来的结果有正有负,最后转到8u上去
grady = cv.convertScaleAbs(grad_y)
cv.imshow(\'grad_x\',gradx)
cv.imshow(\'grad_y\', grady)
gradxy=cv.addWeighted(gradx,0.5,grady,0.5,0)
cv.imshow(\'gradient\',gradxy)

def lapalacian_demo(image):
dst=cv.Laplacian(image,cv.CV_32F)#默认ksize:[3,3]
lpls=cv.convertScaleAbs(dst)
cv.imshow(\'lpls\',lpls)

def custom_lapalacian(image):
kernel=np.array([[0, 1, 0],
[1,-4, 1],
[0, 1, 0]])
kernel_p = np.array([[1, 1, 1],
[1, -8, 1],
[1, 1, 1]]) #kernel的增强版
dst=cv.filter2D(image,cv.CV_32F,kernel)
lpls=cv.convertScaleAbs(dst)
cv.imshow(\'lpls\',lpls)

src=cv.imread(\'D:/opencv/meinv.jpg\')
cv.imshow(\'src\',src)
# sobel_demo(src)
# scharr_demo(src)
# lapalacian_demo(src)
custom_lapalacian(src)
cv.waitKey(0)
cv.destroyAllWindows()

分类:

技术点:

相关文章: