如何调用OpenCV Sobel函数来计算给定内核大小的图像的实际导数?即考虑到图像是f(x, y)
和x, y
的函数,从[0, 0]
到[width, height]
的像素范围是什么?
dimg_x = cv2.Sobel(img, ddepth=-1, dx=1, dy=0, ksize=ksize)
可能需要对渐变图像应用某些缩放,但我无法弄清楚如何在给定内核大小的情况下计算它。
答案 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)
,而是将结果作为浮点数或双精度。