我试图了解cv2.Sobel中的scale
参数。将scale
设置为1/8,沿x轴的输出如下:
但是在scale = 10或scale = 100的情况下,输出非常相似。
以上两个图像都是沿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
有什么作用?有什么用?
答案 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))。