scale在cv2.Sobel中是什么意思?

时间:2019-02-24 06:09:10

标签: python opencv image-processing computer-vision sobel

我试图了解cv2.Sobel中的scale参数。将scale设置为1/8,沿x轴的输出如下:

enter image description here

但是在scale = 10或scale = 100的情况下,输出非常相似。

enter image description here

以上两个图像都是沿x轴的一阶梯度,分别为1/8和100。

import cv2

filename = "./images/cube.jpg"

img = cv2.imread(filename,0)

sx = cv2.Sobel(img, cv2.CV_64F, 1,0, ksize=3, scale= 1/8)


cv2.imshow("sx", sx)

if cv2.waitKey(0) & 0xff == 27:
    cv2.destroyAllWindows()

自变量scale有什么作用?有什么用?

1 个答案:

答案 0 :(得分:0)

在C ++的源代码中见到OpenCV中的cv :: Sobel:

Mat kx, ky;
getDerivKernels( kx, ky, dx, dy, ksize, false, ktype );
if( scale != 1 )
{
    // usually the smoothing part is the slowest to compute,
    // so try to scale it instead of the faster differentiating part
    if( dx == 0 )
        kx *= scale;
    else
        ky *= scale;
}

因此,规模是Sobel内核的一个因素。如果scale!= 1,则kernel1将不是((-1 0 +1)(-2 0 +2)(-1 0 +1))。将会是((scale 0 + scale)(-2 * scale 0 + 2 * scale)(scale 0 + scale))。