import cv2
import numpy as np
img = cv2.imread("lena.jpg", 0)
x = cv2.Sobel(img,cv2.CV_16S,1,0)
y = cv2.Sobel(img,cv2.CV_16S,0,1)
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
resule = cv2.addWeighted(absX,0.5,absY,0.5,0) # result = 0.5x + 0.5y
请问为什么不是用均方根呢?
result_new = np.sqrt(x * x + y * y)
result_new = np.rint(result_new).astype(np.uint8)
cv2.imshow("new",result_new) # 出来结果不一致,好像是错误的
Sobel算子可以用来计算图像的梯度信息,其中梯度指的是图像中像素灰度值的变化率。在x和y方向上计算梯度可以分别得到两张图像,分别表示x和y方向上的梯度信息。如果要将这两张图像合成,可以使用cv2.addWeighted函数。
可以用均方根,或者说准确的说应该使用均方根。
但是,均方根的计算量大,耗时较长。所以在工程上,在 absX 和 absY 的取值范围,可以直接用加法代替均方根。
因为 SobelX 和 SobelY 的绝对值大小并不重要,我们关心的主要是其相对大小。