Opencv Sobel对角线边缘检测(右上45度,左上135度)
我对opencv的Sobel边缘检测器有异议。从其文档来看,它似乎只适用于水平和垂直方向的边缘(通过指定0,1或1,0)有人知道如何使用cvSobel获得45度和135度的对角边吗。 Matlab有一个边缘(i,'Souel'…)选项,但是我的代码都是C++的,我想保持它。 感谢您的建议和解决方案。Hei。 通常可以按以下方式计算任意方向上的任意过滤器:Opencv Sobel对角线边缘检测(右上45度,左上135度),opencv,edge-detection,Opencv,Edge Detection,我对opencv的Sobel边缘检测器有异议。从其文档来看,它似乎只适用于水平和垂直方向的边缘(通过指定0,1或1,0)有人知道如何使用cvSobel获得45度和135度的对角边吗。 Matlab有一个边缘(i,'Souel'…)选项,但是我的代码都是C++的,我想保持它。 感谢您的建议和解决方案。Hei。 通常可以按以下方式计算任意方向上的任意过滤器: resX=X方向上的计算结果 resY=Y方向上的计算结果 选择所需方向(角度alpha) 所需的结果是sqrt((Y*sin(alpha))
这适用于边缘检测、运动模糊和任何线性定向过滤器。它确实检测对角线。你只要运行两次。根据定义,水平和垂直的点都是对角线。@luhfluh,我有(1,1)个工作点。我正在使用OpenCV2.2。在文档中提到了这个限制吗?@Andrey:(1,1)不是对角的-它是一个双导数(在x和y中)。@etarion,我知道。使用(1,1)可以检索所有边,包括对角线。现在我了解到OP只需要对角边:)@luhfluh,尝试旋转sobel中使用的内核,并调用自定义过滤器hanks@Andrey和@Etarion以获取您的建议。然而,我从以下sudo代码中找到了一种方法:伪代码:cvSobel(graysog,dx,1,0,3)cvSobel(graysog,dy,1,0,3)表示j的高度,表示I的宽度,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