【问题标题】:Opencv Sobel edge detection for diagonal (up-right 45deg, upleft 135deg)对角线的Opencv Sobel边缘检测(右上45度,左上135度)
【发布时间】:2012-12-20 14:46:57
【问题描述】:

我遇到了 opencv 的 Sobel 边缘检测器的问题。 从它的文档来看,它似乎只适用于水平和垂直方向的边缘(通过指定 0,1 或 1,0)。 有人知道如何使用 cvSobel 获得 45 度和 135 度的对角线边缘不是 Canny 方法)。 Matlab 有一个带有 edge(I,'sobel' ...) 选项的灵魂,但我的代码都是 c++ 的,我想保留它。

感谢您的建议和解决方案。

【问题讨论】:

  • @luhfluh,我有 (1, 1) 工作。我正在使用 OpenCV2.2。文档中哪里提到了这个限制?
  • @Andrey:(1,1) 不是对角线 - 它是双导数(在 x 和 y 中)。
  • @etarion,我知道。使用 (1,1) 可以检索包括对角线在内的所有边。现在我知道 OP 只需要对角线边 :)
  • @luhfluh,尝试旋转sobel中使用的内核并调用自定义过滤器
  • 感谢@Andrey 和@Etarion 的建议。然而,我从opencv-users.1802565.n2.nabble.com/… 找到了使用以下 sudo 代码的方法: 伪代码:cvSobel(grayimg, dx, 1, 0, 3) cvSobel(grayimg, dy, 1, 0, 3) for j in height for i in width mag = sqrt(dx[i,j]^2 + dy[i,j]^2) 如果 mag > thresh orient[i,j] = atan2(dy[i,j], dx[i,j]) 否则方向[i,j] = 4

标签: opencv edge-detection


【解决方案1】:

嘿嘿。 您通常可以通过以下方式计算任何方向的任何过滤器:

  1. resX = X 方向计算结果
  2. resY = 计算 Y 方向的结果
  3. 选择所需的方向(角度 alpha)
  4. 想要的结果是 sqrt((Y*sin(alpha))^2 + (X*cos(alpha))^2)

这适用于边缘检测、运动模糊和任何线性定向过滤器。

【讨论】:

    【解决方案2】:

    确实检测对角线。你只需运行它两次。根据定义,水平和垂直的点是对角线。

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多