【发布时间】: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