【问题标题】:The direction of Gradient Filter in openCVopenCV中梯度过滤器的方向
【发布时间】:2018-02-07 20:03:21
【问题描述】:

感谢观看。

当我在this website阅读概念帮助时会弹出问题

当应用梯度卷积滤波器时,给定方向不同,根据光强给出不同的边缘,见下图:

filter result with positive direction

filter result with negative direction

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

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

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

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

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

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

【问题讨论】:

  • 是卷积,为什么不用filter2D

标签: python opencv


【解决方案1】:

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]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2013-06-22
    • 1970-01-01
    相关资源
    最近更新 更多