openCV中Gradient Filter的方向

时间:2017-08-30 07:47:11

标签: python opencv

谢谢你看看。

当我在this website

上阅读概念帮助时,会弹出问题

当应用具有不同给定方向的梯度卷积滤波器时,根据光强度给出不同的边缘,请参见以下内容:

filter result with positive direction

filter result with negative direction

然后我试图在opencv中用y轴cv2.Sobel实现相同的功能。

cv2.Sobel(img,cv2.CV_8U,0,1)  

代码仅显示一个方向上检测到的边缘。我没有设法改变方向来显示另一个强度检测到的边缘。

我知道使用CV_64,可以检测到两者,但我希望将它们分开,与之前显示的示例完全相同。

我找到了一个技巧来反转图像img=255-img的b / w,然后应用相同的过滤器cv2.Sobel(img,cv2.CV_8U,0,1)云显示我预期的另一个边缘。

我想知道是否可以通过cv2.Sobel函数或任何其他opencv过滤器控制此过滤器方向,而无需反转图像的黑白。

1 个答案:

答案 0 :(得分:2)

OpenCV允许您仅在y方向和x方向上应用Sobel滤波器。您可以查看documentation以查看有关所应用内核的更多信息。

对于x方向,它是:

cv2.Sobel(img,cv2.CV_8U,1,0)  

对于y方向:

cv2.Sobel(img,cv2.CV_8U,0,1)  

最后2个数字分别表示图像在x和y中的导数的阶数。你可以同时在两个方向上使用更复杂的:

cv2.Sobel(img,cv2.CV_8U,1,1)  

另外,我看到你的图像中有另一个操作符(对角线)。我不确定你是否可以直接使用sobel功能,但肯定可以使用filter2D“手动”完成。

cv2.filter2D(img, cv2.CV_8U, kernel)

其中kernel是出现在图像中的内核矩阵。

kernel = np.array([[0, -1, -1],
                   [1,  0, -1],
                   [1,  1,  0]])