Sobel 算子的缺点是,当其核结构较小时,精确度不高,而 Scharr 算子具有更高的精度。
【例 9.13】分别使用 Sobel 算子和 Scharr 算子计算一幅图像的水平边缘和垂直边缘的叠加信息。
import cv2
import numpy as np
img = cv2.imread("/Users/zhaofeier/Desktop/源代码及图像/chapter9/lena.bmp",0)
dx1 = cv2.Sobel(img,cv2.CV_64F,1,0)
dx1 = cv2.convertScaleAbs(dx1)
dy1 = cv2.Sobel(img,cv2.CV_64F,0,1)
dy1 = cv2.convertScaleAbs(dy1)
dx2 = cv2.Scharr(img,cv2.CV_64F,1,0)
dx2 = cv2.convertScaleAbs(dx2)
dy2 = cv2.Scharr(img,cv2.CV_64F,0,1)
dy2 = cv2.convertScaleAbs(dy2)
result1 = cv2.addWeighted(dx1,0.5,dy1,0.5,0)
result2 = cv2.addWeighted(dx2,0.5,dy2,0.5,0)
cv2.imshow("img",img)
cv2.imshow("result1",result1)
cv2.imshow("result2",result2)
cv2.waitKey()
cv2.destroyAllWindows()