sobel算子计算过程详解,sobel算子属于几阶算子
说明
1.Sobel算子是根据一个像素的上下左右相邻点的灰度加权差在边缘处达到极值的现象来检测边缘的。
它可以平滑噪声并提供更准确的边缘方向信息。因为Sobel算子结合了高斯平滑和微分导数(微分),所以结果会更抗噪。当精度不高时,Sobel算子是常用的边缘检测方法。
2.Sobel算子还是一个滤波器,但是有方向。
dst=cv2。Sobel(src,ddepth,dx,dy[,dst[,ksize[,scale[,delta[,border type]]])实例
#编码=utf-8
importcv2
importnumpyasnp
img=cv2 . im read( d :/test/26 . png ,0)
在Sobel函数的第二个参数cv2中。这里用的是CV_16S。
因为OpenCV文档中关于Sobel算子的介绍中有这样一句话:
in thecase F8-bitinputimagesitwillresultintruncatedderivatives .
也就是说,Sobel函数在计算其导数后将具有负值和大于255的值。
而且原图是uint8,也就是8位无符号数,所以Sobel创建的图像不够用,会被截断。
因此,16位有符号数据类型cv2。应该使用CV_16S。
处理后,不要忘记使用convertScaleAbs()函数将其转换回原始的uint8形式。
否则,图像将不会显示,而只是一个灰色窗口。convertScaleAbs()的原型是:
dst=cv2.convertScaleAbs(src[,dst[,alpha[,beta]])
其中可选参数是展开系数,是添加到结果中的值。结果返回uint8类型的图片。
由于Sobel算子是在两个方向上计算的,所以最终它们需要与cv2.addWeighted(.)功能。
它的功能原型是:
dst=cv2.addWeighted(src1,alpha,src2,beta,gamma[,dst[,dtype]])
其中,alpha是第一个图像中元素的权重,beta是第二个图像的权重,gamma是添加到最终结果的值。
x=cv2。索贝尔(img,cv2。CV_16S,1,0)
y=cv2。索贝尔(img,cv2。CV_16S,0,1)
Abs=cv2.convertscaleabs (x) #转回uint8
absY=cv2.convertScaleAbs(y)
dst=cv2.addWeighted(absX,0.5,absY,0.5,0)
cv2.imshow(orign ,img)
cv2.imshow(absX ,absX)
cv2.imshow(absY ,absY)
cv2.imshow(Result ,dst)
cv2.waitKey(0)
2.cv2.destroyAllWindows()以上是Sobel运算符在python中的使用。希望对你有帮助。更多python学习方向:Python基础课程
本教程运行环境:windows7系统,Python 3.9.1,DELL G3电脑。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。