Sobel(索贝尔)特点是抗噪音效果好
Schar(沙尔)一个卷积核不可改变的滤波方式,对于3*3的卷积核来说索贝尔滤波效果比不上沙尔滤波。
Laplacian(拉普拉斯)对于噪音比较敏感
Sobel索贝尔算子:
一般情况下我们先向x方向求导,然后在y方向求导,最终结果是:|G|=|Gx|+|Gy|。
Sobel索贝尔api:
Sobel(src,ddepth,dx,dy,ksize=3)
Src:具体操作的图片
Ddepth:输出的位深
dx,dy:对谁求导
Ksize:卷积核默认为3
import cv2 import numpy as np # 导入一张图 img=cv2.imread('C:\\Users\\mk\\Desktop\\1.jpg') # 索贝尔x方向上的边缘 dst_x=cv2.Sobel(img,cv2.CV_64F,2,0,ksize=5) # 索贝尔y方向上的边缘 dst_y=cv2.Sobel(img,cv2.CV_64F,0,2,ksize=5) # 合并图片 dst=dst_x+dst_y # 显示图片 cv2.imshow('img',img) cv2.imshow('dst_x',dst_x) cv2.imshow('dst_y',dst_y) cv2.imshow('dst',dst) cv2.waitKey(0)Scharr沙尔算子
沙尔算子和索贝尔算子很类似的,最大的不同是卷积核kernel的值不同。沙尔只能求x方向或者y方向的边缘。
Scharr沙尔api:
Scharr(src,ddepth,dx,dy)
Src:具体进行操作的图片
Ddepth:输出的位深
dx,dy:对哪个方向求导
import cv2 import numpy as np # 导入一张图 img=cv2.imread('C:\\Users\\mk\\Desktop\\1.jpg') # 沙尔x方向上的边缘 dst_x=cv2.Scharr(img,cv2.CV_64F,1,0) # 沙尔y方向上的边缘 dst_y=cv2.Scharr(img,cv2.CV_64F,0,1) # 合并图片 dst=dst_x+dst_y # 显示图片 cv2.imshow('img',img) cv2.imshow('dst_x',dst_x) cv2.imshow('dst_y',dst_y) cv2.imshow('dst',dst) cv2.waitKey(0)Laplacian拉普拉斯算子
拉普拉斯可以同时求两个方向的边缘,缺点是多噪音比较敏感,一般需要先进行去噪然后再使用拉普拉斯。
Laplacian拉普拉斯api:
Laplacian(img,ddepth,ksize=1,scale=1)
img:具体进行操作的图片
ddepth:输出的位深
ksize:卷积核大小,不设默认值为1
scale:缩放值,不设默认值为1
import cv2 import numpy as np # 导入一张图 img=cv2.imread('C:\\Users\\mk\\Desktop\\1.jpg') # 拉普拉斯 dst=cv2.Laplacian(img,cv2.CV_64F,ksize=5) # 显示图片 cv2.imshow('img',img) cv2.imshow('dst',dst) cv2.waitKey(0)