python+opencv图像处理(四十一)
Scharr算子
1、Scharr算子
Scharr算子也是用于提取图像边缘的。
它是对Sobel算子差异性的增强,两者的原理和使用方式上相同。
Scharr算子检测边缘滤波的尺寸为3*3。
其在x方向和y方向的边缘检测算子如下所示:
2、Scharr算子实现
def scharr(src):
x=cv.Scharr(src,cv.CV_16S,1,0)
y=cv.Scharr(src,cv.CV_16S,0,1)
gradx=cv.convertScaleAbs(x)
grady=cv.convertScaleAbs(y)
res=cv.addWeighted(gradx,0.5,grady,0.5,0)
return res
3、与sobel的比较
import cv2 as cv
import numpy as np
#Sobel算子,返回边缘检测的图像。
def sobel(src):
x=cv.Sobel(src,cv.CV_16S,1,0)
y=cv.Sobel(src,cv.CV_16S,0,1)
gradx=cv.convertScaleAbs(x)
grady=cv.convertScaleAbs(y)
res=cv.addWeighted(gradx,0.5,grady,0.5,0)
return res
#Scharr算子,返回边缘检测的图像。
def scharr(src):
x=cv.Scharr(src,cv.CV_16S,1,0)
y=cv.Scharr(src,cv.CV_16S,0,1)
gradx=cv.convertScaleAbs(x)
grady=cv.convertScaleAbs(y)
res=cv.addWeighted(gradx,0.5,grady,0.5,0)
return res
img=cv.imread("li.png",0)
w,h=img.shape
img=cv.resize(img,(int(w),int(h/1.5)),interpolation=cv.INTER_CUBIC)
s=sobel(img)
res=scharr(img)
r=np.hstack((img,s,res))
cv.imshow("compare",r)