1.Premitt算子:检测水平和竖直方向
2.Roberts算子:45°斜对角线 Premitt算子 ..... Roberts算子
# Premitt算子
kx = np.array([
[-1,0,1],
[-1,0,1],
[-1,0,1]],dtype=np.float32)
ky = np.array([
[-1,-1,-1],
[0,0,0],
[1,1,1]],dtype=np.float32)
imgX = cv.filter2D(image,cv.CV_64F,kx)
imgY = cv.filter2D(image,cv.CV_64F,ky)
imgXY = np.sqrt(imgX**2 + imgY**2) #斜着检测,等于x平方加y平方再开根号
imgXY2 = np.abs(imgX) + np.abs(imgY) #斜着检测,等于x,y直接相加
#show(np.abs(imgX)) 因为可能会有负值,所以取绝对值,或者截断show(np.abs(img).clip(0,255))
# Roberts算子,同上,直接改卷积核
3.Sobel-Feldman算子
4.Scharr算子
#Sober算子
imgX = cv.Sobel(image,cv.CV_64F,1,0,3) # X方向 '1,0' 代表X水平方向, 3是卷积核大小
imgY = cv.Sobel(image,cv.CV_64F,0,1,3) # Y方向 '0,1' 代表Y竖直方向, 3是卷积核大小
imgXY = np.abs(imgX) + np.abs(imgY) # 斜着方向
show(imgXY.clip(0,255))
# Scharr算子
imgX = cv.Scharr(image,cv.CV_64F,1,0,3) # X方向 '1,0' 代表X水平方向, 3是卷积核大小
imgY = cv.Scharr(image,cv.CV_64F,0,1,3) # Y方向 '0,1' 代表Y竖直方向, 3是卷积核大小
imgXY = np.abs(imgX) + np.abs(imgY) # 斜着方向
show(imgXY.clip(0,450))
5.Laplacian算子
6.LOG算子
# Laplacian算子
img = cv.Laplacian(image,cv.CV_64F)
show(np.abs(img).clip(0,255))
# LOG算子 实质就是高斯模糊后再拉普拉斯算子
blur = cv.GaussianBlur(image,(3,3),1)
img1 = cv.img = cv.Laplacian(blur,cv.CV_64F)
show(np.abs(blur).clip(0,255))
7.Canny算子
# Canny算子
img = cv.Canny(image,50,100) #50位置的值决定边缘粗细,150位置的值决定轮廓的多少
show(img)