如何在给定内核大小的情况下规范化OpenCV Sobel过滤器

时间:2016-04-15 02:44:19

标签: python opencv

如何调用OpenCV Sobel函数来计算给定内核大小的图像的实际导数?即考虑到图像是f(x, y)x, y的函数,从[0, 0][width, height]的像素范围是什么?

dimg_x = cv2.Sobel(img, ddepth=-1, dx=1, dy=0, ksize=ksize)

可能需要对渐变图像应用某些缩放,但我无法弄清楚如何在给定内核大小的情况下计算它。

2 个答案:

答案 0 :(得分:0)

我认为这个片段可以解决问题:

def gradient(img, dx, dy, ksize):
    deriv_filter = cv2.getDerivKernels(dx=dx, dy=dy, ksize=ksize, normalize=True)
    return cv2.sepFilter2D(img, -1, deriv_filter[0], deriv_filter[1])

答案 1 :(得分:0)

您可以使用scale的{​​{1}}参数:

Sobel

当您按比例缩放输出时,通常想要cv2.Sobel(img, dx=dx, dy=dy, ksize=ksize, scale=2**(2+dx+dy-ksize*2), ddepth=CV_32F) ,而是将结果作为浮点数或双精度。