《OpenCV轻松入门:面向Python》读书笔记
作者:李立宗
出版社:电子工业出版社
出版时间:2019-05
第9章 图像梯度
9.2 Sobel算子及函数使用
1、函数
在OpenCV内,使用函数cv2.Sobel()实现Sobel算子运算,其语法形式为:
dst = cv2.Sobel( src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType]]]] )
式中:
- dst代表目标图像。
- src代表原始图像。
- ddepth代表输出图像的深度。
- dx代表x方向上的求导阶数。
- dy代表y方向上的求导阶数。
- ksize代表Sobel核的大小。该值为-1时,则会使用Scharr算子进行运算。
- scale代表计算导数值时所采用的缩放因子,默认情况下该值是1,是没有缩放的。
- delta代表加在目标图像dst上的值,该值是可选的,默认为0。
- borderType代表边界样式。
2、示例
【例9.6】计算函数cv2.Sobel()在水平、垂直两个方向叠加的边缘信息。
import cv2
o = cv2.imread('sobel4.bmp',cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(o,cv2.CV_64F,1,0)
sobely = cv2.Sobel(o,cv2.CV_64F,0,1)
sobelx = cv2.convertScaleAbs(sobelx) # 转回uint8
sobely = cv2.convertScaleAbs(sobely)
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
cv2.imshow("original",o)
cv2.imshow("xy",sobelxy)
cv2.waitKey()
cv2.destroyAllWindows()
3、分析
从程序可以看出,本例中首先分别计算x方向的边缘、y方向的边缘,接下来使用函数cv2.addWeighted()对两个方向的边缘进行叠加。在最终的叠加边缘结果中,同时显示两个方向的边缘信息。
4、结果

网友评论